2016-04-12 7 views
5

Es scheint auf einigen Software/Compiler die pow() Funktion funktioniert ohne irgendwelche Math-Bibliotheken überhaupt. Nur mit <iostream>. Aber in anderen klagt es. Sind mathematische Funktionen in die Bibliothek <iostream> oder an einen anderen Ort hinzugefügt worden?pow() - Funktion funktioniert ohne Mathematik-Bibliotheken

+4

Es ist nicht spezifiziert, welche Standard-Header welche anderen Standard-Header enthalten. Ein tragbares Programm sollte explizit enthalten, was es verwendet. –

+0

Gleiche Antwort, aber andere Situation: http://stackoverflow.com/questions/9498700/removing-include-algorithm-doesnt-break-the-code – NathanOliver

Antwort

3

Header können - und tun es oft - auch andere Header. Header der Standardbibliothek bilden keine Ausnahme.

Auch wenn Sie einen Header nicht enthalten gewählt (wir nennen es a), die Sie hing davon ab, es ist möglich, dass der Header durch einen anderen Header enthalten sein geschah (wir nennen es b), die Sie haben sind. In diesem Fall funktioniert Ihr Programm nicht weiter, wenn der Header b jemals so geändert wird, dass er a nicht enthält. Aus diesem Grund müssen Sie immer alle Header einschließen, auf die Sie angewiesen sind - selbst wenn Ihr Programm scheinbar ohne einige davon funktioniert.

Alle verschiedenen Versionen von verschiedenen Implementierungen von Standard-Bibliothek sind unterschiedlich und daher a in einer Version b während a in einer anderen Version könnte b genausogut nicht enthalten enthalten könnte. Gleiches gilt für alle APIs mit mehreren Versionen von Implementierungen.

1

Wie hier explizit erwähnt, pow IS in cmath header. http://www.cplusplus.com/reference/cmath/pow/.

Was ist für enthält in <iostream>, nur überprüft, dass die aktuelle Version von GCC (ich benutze Archlinux, so ist es die neueste) enthält keine cmath in einen der inneren Includes von iostream.

Wie auch immer, auch wenn es funktioniert, ist es gegen den Standard. Fügen Sie explizit <cmath> hinzu.