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>
。
在某些 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>
。