C++标准引入了新的API,同时保持与C API的兼容性。C 包装器的标头以"c"开头,例如
我的问题是,为什么STL不提供新的数学库,即使旧的C API中存在许多缺陷。缺陷包括但不限于:C API 使用"f"、"l"和"ll"前缀来声明不同类型的函数,而C++可能会重载、缺少 pi 和 e 等常量。
C的<math.h>
有一个C++标准库版本:它是<cmath>
。<cfoo>
标头不仅仅是带有 std
命名空间中名称的<foo.h>
包装器。它们使用一些C++功能,例如函数重载,并且可以具有更多功能。例如,<cmath>
有一堆特殊的数学函数
考虑std::abs
.在<cmath>
中,有int
、long
和long long
以及float
、double
和long double
的重载。
<cmath>
是 C++ 的标准库标头,它从 C 标头<math.h>
扩展而来,并带有命名空间std
。
自 17 C++以来,特殊数学函数从 TR1 和线性插值函数 (C++ 20( 合并到标准中,这些函数包含在标题<cmath>
。
一些数学函数包含在<numeric>
中,例如 constexpr 函数 gcd
、lcd
和 midpoint
(从 C++ 20 开始(。
量在第 20 C++添加,这些常数包含在名为 <numbers>
的单独标头中,并包含在命名空间 std::numbers
中。
从标准数学库中仍然可以找到一些缺陷,其中包括由于与 C 的向后兼容性而导致的函数重载的不一致,并且一些数学概念包含在单独的标头中。