【发布时间】:2018-03-10 03:47:56
【问题描述】:
C++ 标准在保持与 C API 兼容的同时引入了新的 API。 C 包装器的标头以“c”开头,例如
我的问题是为什么 STL 不提供新的数学库,即使旧的 C API 中存在许多缺陷。缺陷包括但不限于:C API 使用“f”、“l”和“ll”前缀来声明不同类型的函数,而 C++ 可以重载、缺少 pi 和 e 等常量。
【问题讨论】:
C++ 标准在保持与 C API 兼容的同时引入了新的 API。 C 包装器的标头以“c”开头,例如
我的问题是为什么 STL 不提供新的数学库,即使旧的 C API 中存在许多缺陷。缺陷包括但不限于:C API 使用“f”、“l”和“ll”前缀来声明不同类型的函数,而 C++ 可以重载、缺少 pi 和 e 等常量。
【问题讨论】:
C 的<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 的重载。
【讨论】:
<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 向后兼容而导致的函数重载不一致,并且一些数学概念包含在单独的标题中。
【讨论】: