数学接口与C++中的cMath

Math interface vs cMath in C++

本文关键字:中的 cMath C++ 接口      更新时间:2023-10-16

在我的构建系统MacOS 10.6.3上,用于POSIX数学库的接口是math.h,但在我的目标系统上,接口文件的名称是cmath.h。在学校,我们使用cmath,我想确保我的项目在提交时编译,这是如何实现的。学校的服务器和工作站是运行WindowsXP的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);
}

等等。(C++库可能另外从<cmath>导出sinf,但在可移植程序中不能依赖于此。)

最后,来自C标准库的fabsfabsffabsl函数已经成为<cmath>std::abs的过载。

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

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