我的构建系统 MacOS 10.6.3 上用于 POSIX 数学库的接口是 math.h,但是在我的目标系统上,接口文件的名称是 cmath.h。在学校我们使用 cmath,我想确保我的项目在提交时可以编译,这是如何实现的。学校的服务器和工作站是运行 Windows XP 的 x86。GCC 在两个平台上都可用。
问问题
5330 次
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 标准库中的fabs
和fabsf
函数fabsl
已成为std::abs
in 的重载<cmath>
。
尽管这两个头文件都在标准中,但您真的应该更喜欢<cmath>
,因为<math.h>
它只是为了与标准前的 C++ 和 C 向后兼容。
<cmath.h>
在标准 C++ 中没有这样的东西。
于 2012-01-04T21:27:15.410 回答