为什么std::isnan 不是 constexpr?

Why is std::isnan not constexpr?

本文关键字:constexpr 不是 isnan std 为什么      更新时间:2023-10-16

截至C++20 std::isnan 不是 constexpr。

这有技术原因吗?

我能想到的只是它在"C header"中,所以没有人费心去修复它(<limits>处理浮点数的函数是constexpr,但不幸的是numeric_limits不包含isnan check)。

答案基本上是"因为提案尚未合并到标准中">

P0533 提出你所问的问题,它没有进入C++20。

其中一个阻碍是,也许这个提议有点大......允许<cmath><cstdlib>中的某些函数设置全局错误代码,这使整个"constexpr所有事物"提案变得复杂*

我认为这些分类功能应该没有任何问题;std::isnan及其同级std::fpclassify被定义为分别与 C 宏isnanfpclassify的行为相同。这将需要略有改变。


*(旁白:p2043"不要constexpr所有的事情"在这里是切线相关的,但它只是在谈论元编程)