【问题标题】:Why isn't there a standard C++ math library <math> instead the C wrapper <cmath>?为什么没有标准 C++ 数学库 <math> 而不是 C 包装器 <cmath>?
【发布时间】:2018-03-10 03:47:56
【问题描述】:

C++ 标准在保持与 C API 兼容的同时引入了新的 API。 C 包装器的标头以“c”开头,例如 。它们对应的 C++ 头文件是

我的问题是为什么 STL 不提供新的数学库,即使旧的 C API 中存在许多缺陷。缺陷包括但不限于:C API 使用“f”、“l”和“ll”前缀来声明不同类型的函数,而 C++ 可以重载、缺少 pi 和 e 等常量。

【问题讨论】:

    标签: c++ stl


    【解决方案1】:

    C 的&lt;math.h&gt; 有一个C++ 标准库版本:它是&lt;cmath&gt;&lt;cfoo&gt; 标头只是 &lt;foo.h&gt; 的包装器,其名称位于 std 命名空间中。它们使用一些 C++ 特性,例如函数重载,并且可以拥有更多特性。比如&lt;cmath&gt;有一堆special mathematical functions

    考虑std::abs。在&lt;cmath&gt; 中,有int, long, and long longfloat, double, and long double 的重载。

    【讨论】:

      【解决方案2】:

      &lt;cmath&gt;是C++的标准库头文件,是从C头文件&lt;math.h&gt;扩展而来,并带有命名空间std

      从 C++ 17 开始,特殊数学函数从 TR1 和线性插值函数 (C++ 20) 合并到标准中,这些函数包含在 &lt;cmath&gt; 标头中。

      &lt;numeric&gt; 中包含一些数学函数,例如 constexpr 函数 gcdlcdmidpoint(来自 C++ 20)。

      在 C++ 20 中添加了数学常量,它们包含在名为 &lt;numbers&gt; 的单独标头中,并包含在命名空间 std::numbers 中。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-28
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多