我的构建系统 MacOS 10.6.3 上的 POSIX 数学库接口是 math.h,但是在我的目标系统上,接口文件的名称是 cmath.h。在学校里我们使用 cmath,我想确保我的项目在提交时编译通过,应该如何实现。学校的服务器和工作站都是运行 Windows XP 的 x86 平台。GCC 在两个平台上都可用。
C++标准中,数学库函数定义在两个头文件中:
<cmath>
将它们包含在命名空间std
中(例如std::sin
),而
<math.h>
将它们包含在全局命名空间中(因此只需使用 sin
)。
两者之间还有其他的差异:虽然 <math.h>
包含了所有 C 数学函数,其中针对不同类型具有不同名称,例如
double sin(double);
float sinf(float);
long double sinl(long double);
等等,<cmath>
包含重载函数,例如
namespace std {
double sin(double);
float sin(float);
long double sin(long double);
}
等等。(<cmath>
可能还会导出来自<cmath>
的sinf
,但您不能在可移植程序中依赖于此.)
最后,在C标准库中的fabs
、fabsf
和fabsl
函数已成为<cmath>
中std::abs
重载的一部分。
虽然两个头文件都是标准的,但您应该真正偏爱<cmath>
,因为<math.h>
仅用于与预标准C++和C向后兼容。
在标准C++中没有<cmath.h>
这样的东西。
cmath.h
和math.h
之间有什么区别?是<cmath>
还是<cmath.h>
? - Basile Starynkevitch