有没有办法在常量表达式中模拟 nan/inf 而没有!使用 C 宏 HUGE_VAL 和 INFINITY 或任何其他的!另外,即使有了它们,它仍然不是 constexpr。
我不想使用 C++ 标准库或 C 标准库提供的任何标准函数。
当然下面的不编译。编译器说 constexpr 变量必须用常量表达式初始化...
template<typename T = double>
constexpr T NaN = T(0.0 / 0.0);
MSVC编译器使用的方法也不编译:
template<typename T = double>
constexpr T NaN = T(1e+300); //with some changes, apparently having the float overflow
我知道这有点笼统,但这是针对图书馆的,我正在寻找一些有根据的建议!谢谢!
最佳答案
__builtin_nan("0")
我使用 compiler explorer 检查了这个它似乎在 gcc 6.1+、clang 6.0.0+、MSVC v19.24+ 和许多其他不常见的编译器中也受支持。
使用编译器提供的。这是唯一的非标准方式。检查您的编译器是否以及如何提供此功能。还要记住标准库提供 std::numeric_limits<T>::has_quiet_NaN
这是有原因的。
关于c++ - 在 constexpr 变量模板中模拟 nan/inf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34549529/