数学接口与C ++中的cMath

时间:2012-01-04 21:22:04

标签: c++ gcc cmath

我的构建系统MacOS 10.6.3上用于POSIX数学库的接口是math.h,但是在我的目标系统上,接口文件的名称是cmath.h。在学校我们使用cmath,我想确保我的项目在交付时编译,这是如何实现的。学校的服务器和工作站是运行Windows XP的x86。 GCC可在两个平台上使用。

1 个答案:

答案 0 :(得分:19)

在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);
}

等。 (C ++库可能还会从sinf导出<cmath>,但您不能在便携式程序中依赖它。)

最后,C标准库中的fabsfabsffabsl函数已成为std::abs<cmath>的重载。

虽然两个标头都在标准中,但您应该更喜欢<cmath>,因为<math.h>仅用于向后兼容预标准C ++和C.

标准C ++中没有<cmath.h>这样的东西。