pow() 函数在没有任何数学库的情况下工作

pow() function working without any math libraries

在某些 software/compilers 上,pow() 函数似乎根本不需要任何数学库。只有 <iostream>。但在其他情况下,它会抱怨。 <iostream> 库或其他地方是否添加了数学函数?

Headers 可以 - 并且经常这样做 - 包括其他 header。标准库 header 也不例外。

即使您选择不包含您所依赖的 header(我们将其命名为 a),header 也有可能恰好被另一个 header(我们将其命名为 b)。在这种情况下,如果 b header 被修改为不包含 a,则不能保证您的程序继续工作。这就是为什么您必须始终包含您所依赖的所有 header 的原因 - 即使您的程序似乎在不包含其中一些的情况下也能正常工作。

标准库的不同实现的所有不同版本都不同,因此一个版本中的 a 可以包含 b 而另一个版本中的 a 也可以不包含 b。这同样适用于所有具有多个实施版本的 API。

正如此处明确指出的那样,pow 在 cmath 中 header。 http://www.cplusplus.com/reference/cmath/pow/

<iostream> 中包含的内容,只是检查了当前版本的 GCC(我使用的是 archlinux,所以它是最新的)没有将 cmath 包含到任何 iostream 的内部包含中。

反正就算能用,也是违背标准的。明确包含 <cmath>