浮点除以零而不是 constexpr

2024-04-04

编译时:

constexpr double x {123.0};
constexpr double y = x / 0.0;
std::cout << x << " / 0 = " << y << "\n";

编译器(gcc 4.9.2,-std=c++11 或 c++14)失败,给出错误:

(1.23e+2 / 0.0)' is not a constant expression
  constexpr double y = x / 0.0;

当决定是否时,结果 (Inf) 有何相关性?y可以是一个常量表达式 or not?

作为参考,这似乎是这样做的方法:

static constexpr double z = std::numeric_limits<double>::quiet_NaN();
static constexpr double w = std::numeric_limits<double>::infinity();

无穷大是实现定义的结果,标准不要求IEEE 浮点 http://en.wikipedia.org/wiki/IEEE_floating_point除以零的形式是未定义的行为 http://en.wikipedia.org/wiki/Undefined_behavior and 常量表达式排除未定义的行为 https://stackoverflow.com/q/21319413/1708801.

来自 C++ 标准草案部分5.6 [表达式.mul]:

二元 / 运算符产生商,二元 % 运算符产生商 产生第一个表达式除以的余数 第二。如果 / 或 % 的第二个操作数为零,则行为为 不明确的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浮点除以零而不是 constexpr 的相关文章

随机推荐