2016-04-12 21 views
5

Sembra che su alcuni software/compilatori la funzione pow() funzioni senza alcuna libreria matematica. Solo con <iostream>. Ma in altri si lamenta. Sono state aggiunte funzioni matematiche alla libreria <iostream> o in qualche altro posto?Funzione pow() senza librerie matematiche

+4

Non è specificato quali intestazioni standard includano le altre intestazioni standard. Un programma portatile dovrebbe includere esplicitamente ciò che usa. –

+0

La stessa risposta ma situazione diversa: http://stackoverflow.com/questions/9498700/removing-include-algorithm-doesnt-break-the-code – NathanOliver

risposta

3

Le intestazioni possono, e spesso lo fanno, includere altre intestazioni. Le intestazioni della libreria standard non fanno eccezione.

Anche se si è scelto di non includere un'intestazione (denominata a) da cui si è dipeso, è possibile che l'intestazione sia stata inclusa da un'altra intestazione (denominiamola b) che è stato incluso. In tal caso, il tuo programma non può continuare a funzionare se l'intestazione b viene modificata per non includere a. Questo è il motivo per cui devi sempre includere tutte le intestazioni da cui dipenderti, anche quando il tuo programma sembra funzionare senza includerne alcune.

Tutte le diverse versioni di diverse implementazioni di libreria standard sono diversi e quindi a in una versione potrebbe includere b mentre a in un'altra versione potrebbe altrettanto bene non includono b. Lo stesso vale per tutte le API che hanno più versioni di implementazioni.

1

Come è esplicitamente indicato qui, pow IS nell'intestazione del cmath. http://www.cplusplus.com/reference/cmath/pow/.

Cosa è incluso in <iostream>, ho appena controllato che la versione corrente di GCC (sto usando archlinux, quindi è l'ultima) non includa cmath in nessuno degli interni di iostream.

In ogni caso, anche se funziona, è contro lo standard. Includere <cmath> in modo esplicito.