C + + cmath与math.h(和类似的C前缀与.h扩展头)

我已经看到了一些关于iostreamiostream.h之间的区别的信息。 从我从那些收集的差异是他们之间的差异是没有.h扩展名的版本不会填充命名空间,而扩展版本会。

这是相同的cmathmath.h ? 为什么cmath (和许多其他类似的文件)以c为前缀而不是math ? 他们之间有更多的差异吗?

感谢您的时间!

我已经看到了一些关于iostream和iostream.h之间的区别的信息。

[iostream.h]不是标准头文件。

这不是你正在提出的问题的一个例子。

[cmath]在std命名空间中定义符号,也可以在全局命名空间中定义符号。 [math.h]定义全局名称空间中的符号,也可以在std名称空间中定义符号。 如果包含前者并使用非限定符号,则可以使用一个编译器编译,但不能使用另一个。 因此使用[math.h]是个好主意。 一般来说,对于这样的头对,使用[.h]版本。

c ++ 98提供了c xxx头文件的正式保证,不污染全局名称空间。 也许这就是为什么他们被定义。 然而,实施起来比污染的要难一些,所以在实践中没有我所知道的标准库实现遵循了这方面的标准,所以最终在c ++ 11中被改变为反映现实。

名称以c开头的标题是从C标准库的标题派生而来的。 删除了c前缀并添加了.h后缀的相应标题与C标准库标题相同(或几乎相同)。

<cmath>定义std命名空间下的相关符号; <math.h>全局定义它们。

(我刚刚知道这不是那么简单,见Alf的答案。)

也许这会有所帮助:

C ++库包含与C语言库相同的定义,它们组织在相同的头文件结构中,具有以下区别:每个头文件与C语言版本具有相同的名称,但带有“c”前缀且没有扩展名。 例如,C语言头文件的C ++等价物是。 库中的每个元素都在std命名空间中定义。

带c前缀的.h扩展头