C ++中的“ if”语句不能从左到右评估条件

时间:2018-10-03 06:33:29

标签: c++ c++11 c++14 integer-division divide-by-zero

我指的是问题“ "IF" argument evaluation order? ”,以了解c ++中“ if”语句的评估顺序。

这是代码,其中if语句中的条件以错误的顺序求值。

#include <iostream>

using namespace std;

int main()
{
    int t = 0;
    if((1 / t) == 1 && t != 0)
    {
        cout << "0" << endl;
    }

    cout << "1" << endl;

    return 0;
}

结果为1而不是浮点异常。

2 个答案:

答案 0 :(得分:19)

被零除是未定义的行为。任何事情都会发生。

[expr.mul]/4

  

如果/或%的第二个操作数为零,则行为不确定。

答案 1 :(得分:6)

除以零并不保证每次程序都会引发运行时错误。这就是为什么除以零是不确定的行为。

作为C标准状态; <​​/ p>

  

/运算符的结果是第一个操作数除以第二个操作数所得的商; %运算符的结果是余数。在这两个操作中,如果第二个操作数的值为零,则行为是不确定的。

对于C ++(03-5.6.4);

  

二进制/运算符得出商,二进制%运算符得出除法的余数   第一个表达式的第二个。如果/或%的第二个操作数为零,则行为不确定。除此以外   (a / b)* b + a%b等于a。如果两个操作数均为非负数,则其余为非负数;   如果不是,则其余符号由实现定义