c ++中的"if"语句不会从左到右评估条件

Ayu*_*dey 6 c++ integer-division divide-by-zero c++11 c++14

为了理解c ++中"if"语句的评估顺序,我指的是问题" "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;
}
Run Code Online (Sandbox Code Playgroud)

结果是1而不是浮点异常.

lll*_*lll 19

除零是未定义的行为.任何事情都可能发生.

[expr.mul/4

如果/或%的第二个操作数为零,则行为未定义.


Yuc*_*l_K 6

除以零并不能保证每次程序都会抛出运行时错误.这就是为什么除以零是一种未定义的行为.

作为C标准的状态;

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

至于C++(03-5.6.4);

二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义; 否则(a/b)*b + a%b等于a.如果两个操作数都是非负的,那么余数是非负的; 如果没有,余数的符号是​​实现定义的