在我的构建系统 MacOS 10.6.3 上,POSIX 数学库的接口(interface)是 math.h,但是在我的目标系统上,接口(interface)文件的名称是 cmath.h。在学校我们使用 cmath,我想确保我的项目在提交时能够编译,这是如何实现的。学校的服务器和工作站是运行 Windows XP 的 x86。 GCC 在两个平台上都可用。
最佳答案
在 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>
,但您不能在可移植程序中依赖它。)
最后,fabs
, fabsf
和 fabsl
C 标准库中的函数已成为 std::abs
的重载在 <cmath>
.
虽然两个 header 都在标准中,但您应该更喜欢 <cmath>
, 作为 <math.h>
只是为了与准标准 C++ 和 C 向后兼容。
没有<cmath.h>
这样的东西在标准 C++ 中。
关于c++ - C++ 中的数学接口(interface)与 cMath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734230/