我看过一些有关iostreamiostream.h之类的区别的信息。从我那里收集到的信息之间的区别是,没有.h扩展名的版本将不会填充 namespace ,而具有扩展名的版本将不会填充 namespace 。
cmathmath.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/

10-11 17:00