10

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

4

1 回答 1

23

在 C++ 标准中,数学库函数在两个头文件中定义:

<cmath>

将它们包含在命名空间中std(例如std::sin),而

<math.h>

将它们包含在全局命名空间中(所以只是sin)。

两者之间还有进一步的区别:while<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 标准库中的fabsfabsf函数fabsl已成为std::absin 的重载<cmath>

尽管这两个头文件都在标准中,但您真的应该更喜欢<cmath>,因为<math.h>它只是为了与标准前的 C++ 和 C 向后兼容。

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

于 2012-01-04T21:27:15.410 回答