C++ 中的"if"语句不会从左到右计算条件

"if" statement in c++ doesn't evaluate conditions from left to right

本文关键字:从左到右 计算 条件 语句 中的 if C++      更新时间:2023-10-16

我指的是问题">"IF"参数求值顺序?"来理解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 而不是浮点异常。

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

[expr.mul]/4

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

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

如 C 标准所述;

/运算符的结果是第一个操作数

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

至于C++(03-5.6.4(;

二进制/运算符产生商,二进制 % 运算符产生除法的余数 第一个表达式由第二个表达式。如果/或 % 的第二个操作数为零,则行为未定义;否则 (a/b(*b + a%b 等于 a。如果两个操作数都是非负数,则余数为非负数; 如果不是,则余数的符号是实现定义的