C ++标准在保持与C API兼容的同时引入了新的API。 C包装的标题以" c"开头。例如< ctime>,< cstring>和< climits>。他们的通讯C ++标题是< chrono>,< string>和< limits>。
我的问题是为什么即使旧C API存在许多缺陷,STL也不会提供新的数学库。缺陷包括但不限于:C API使用" f"," l"和" ll"用于声明不同类型函数的前缀,而C ++可以重载,缺少常量,如pi和e等。
答案 0 :(得分:4)
C&#39 {s} <math.h>
的C ++标准库版本:<cmath>
。 <cfoo>
标头不只是<foo.h>
的包装,其名称在std
命名空间中。它们使用一些C ++功能,例如函数重载,并且可以具有更多功能。例如,<cmath>
有一堆special mathematical functions
考虑std::abs
。在<cmath>
中,int
, long
, and long long
和float
, double
, and long double
都存在重载。
答案 1 :(得分:1)
<cmath>
是 C++ 的标准库头文件,由 C 头文件 <math.h>
扩展而来,带有命名空间 std
。
自 C++ 17 起,特殊数学函数从 TR1 和线性插值函数 (C++ 20) 合并到标准中,这些函数包含在 <cmath>
标头中。
一些数学函数包含在 <numeric>
中,例如 constexpr 函数 gcd
、lcd
和 midpoint
(来自 C++ 20)。
在 C++ 20 中添加了数学常量,它们包含在名为 <numbers>
的单独标头中,并包含在命名空间 std::numbers
中。
您仍然可以从标准数学库中找到缺陷,其中包括由于与 C 的向后兼容性而导致的函数重载不一致,并且一些数学概念包含在单独的头文件中。