编译时:
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(使用前将#替换为@)