浮点除以零而不是constexpr

时间:2015-05-26 13:18:43

标签: c++11 c++14 undefined-behavior constexpr

编译时:

from functools import wraps

def decobj(func):
    @wraps(func)
    def wrapper(self, *args, **kwards):
        with self.lock:
            print 'Got the lock'
            func(self, *args, **kwards)
    return wrapper

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

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

在决定(1.23e+2 / 0.0)' is not a constant expression constexpr double y = x / 0.0; 是否可以成为 constexpr 时,结果(Inf)如何相关?

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

y

1 个答案:

答案 0 :(得分:5)

Infinity是一个实现定义的结果,标准不需要IEEE floating point,除零正式为undefined behaviorconstant expression have an exclusion for undefined behavior

从草案C ++标准部分5.6 [expr.mul]

  

二进制/运算符产生商和二进制%运算符   从第一个表达式的除法得到余数   第二。 如果/或%的第二个操作数为零,则行为为   未定义。