为什么C++标准库不提供cmath函数的constexpr版本?

Dan*_*nra 6 c++ c++-standard-library constexpr c++11

我们有constexpr自C++ 11以来的功能,并且由于每个新标准(14,1z),它们受到的限制越来越少.

然而,STL中最明显的功能constexpr,即cmath/ math.hfunctions,constexpr在任何标准库实现AFAIK中仍然没有版本.

这只是在C++标准的积压中,还是还有其他原因导致我们仍然没有constexpr这些功能的版本?

Pot*_*ter 5

它还没有标准化.上周提交了一份初步提案,但仅涉及实用和线性操作,而不是任何超越功能.数学很难,浮点数学很复杂.例如,实现不允许溢出到无穷大constexpr,但这尚未明确标准化.

编译器的constexpr解释器必须特殊情况下数学库接口,因为与标准库的其余部分不同,它无法看到它的实现.

GCC确实提供了对数学函数的持续评估,作为不一致的扩展.

  • 但是请注意,`constexpr` 并不能保证编译时成功。常量数学可以避免溢出或 `errno`,这正是 GCC 所做的。 (2认同)
  • "甚至没有提出标准化"[不再是真的](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0533r0.pdf). (2认同)