c++ - C++ 中的数学接口(interface)与 cMath

标签 c++ gcc cmath

在我的构建系统 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 , fabsffabsl C 标准库中的函数已成为 std::abs 的重载在 <cmath> .

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

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

关于c++ - C++ 中的数学接口(interface)与 cMath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734230/

相关文章:

c++ - 尝试读取二进制文件 C++ 时出现问题

linux - Make 找不到当前的交叉编译器

c++ - 应该允许 std::unique_ptr<void>

c++ - 如何计算一个整数的小数位数?

C编译时cmath错误

c++ - Reinterpret_cast 在 C++ 中的使用

c++ - 解压 ts... 到 t0.a(), t0.b(), t1.a(), t1.b(),

c++ - UE4包装错误:OpenSSL链接问题

c++ - 对 `Class::Class()' 的 undefined reference

c++ - 如何解决在 C++ 中 sin(M_PI) 不为 0 的事实?