为什么没有标准的C++数学库<math>而不是C包装器<cmath>?

  • 本文关键字:包装 cmath math C++ 标准 c++ stl
  • 更新时间 :
  • 英文 :


C++标准引入了新的API,同时保持与C API的兼容性。C 包装器的标头以"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>中,有intlonglong long以及floatdoublelong double的重载。

<cmath> 是 C++ 的标准库标头,它从 C 标头<math.h>扩展而来,并带有命名空间std

自 17 C++以来,特殊数学函数从 TR1 和线性插值函数 (C++ 20( 合并到标准中,这些函数包含在标题<cmath>

一些数学函数包含在<numeric>中,例如 constexpr 函数 gcdlcdmidpoint(从 C++ 20 开始(。

数学常

量在第 20 C++添加,这些常数包含在名为 <numbers> 的单独标头中,并包含在命名空间 std::numbers 中。

从标准数学库中仍然可以找到一些缺陷,其中包括由于与 C 的向后兼容性而导致的函数重载的不一致,并且一些数学概念包含在单独的标头中。

最新更新