我看过一些有关iostream
和iostream.h
之类的区别的信息。从我那里收集到的信息之间的区别是,没有.h
扩展名的版本将不会填充 namespace ,而具有扩展名的版本将不会填充 namespace 。cmath
和math.h
一样吗?为什么cmath
(以及许多其他类似文件)的前缀是c
而不是math
?它们之间还有更多区别吗?
最佳答案
[iostream.h]不是标准头。
它不是您提出的问题的一个示例。
[cmath]在std
命名空间中定义符号,并且还可以在全局命名空间中定义符号。 [math.h]在全局 namespace 中定义符号,并且还可以在std
namespace 中定义符号。如果包含前者并使用不合格的符号,则它可以使用一个编译器编译,而不能使用另一个编译器编译。因此,使用[math.h]是个好主意。通常,对于此类 header 对,请使用[.h]版本。
c++ 98提供了c xxx
header 不污染全局 namespace 的正式保证。也许这就是为什么要对其进行定义。但是,实现起来比污染的实现难一些,因此在实践中,我所知道的没有一个标准库实现在这方面遵循该标准,因此最终更改为反射(reflect)c++ 11中的现实。
关于c++ - cmath vs math.h(以及类似的c前缀vs .h扩展头),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10694255/