数学接口与C++中的cMath

awi*_*ebe 9 c++ gcc cmath

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

Fre*_*Foo 20

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

<cmath>
Run Code Online (Sandbox Code Playgroud)

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

<math.h>
Run Code Online (Sandbox Code Playgroud)

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

两者之间还有其他区别:while <math.h>包含所有C数学函数,它们具有不同类型的不同名称,例如

double sin(double);
float sinf(float);
long double sinl(long double);
Run Code Online (Sandbox Code Playgroud)

等,<cmath>包含重载功能等

namespace std {
    double sin(double);
    float sin(float);
    long double sin(long double);
}
Run Code Online (Sandbox Code Playgroud)

等等.(C++库可能额外出口sinf<cmath>,但你不能在便携式程序依靠这一点.)

最后,将fabs,fabsffabsl从C标准库函数已经成为重载std::abs<cmath>.

虽然两个标题都在标准中,但您应该更喜欢<cmath>,因为<math.h>只有向前兼容预标准C++和C.

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