【发布时间】:2018-10-03 06:33:29
【问题描述】:
我指的是问题“"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 而不是浮点异常。
【问题讨论】:
-
那么,如果你在 if 之外运行
1/t,你会得到一个 FP 异常吗? -
是,但不在 if 条件下
-
您是否检查过该代码的生成程序集?我猜编译器注意到
t等于0并完全跳过了条件。再次检查t从 cin 读取。 -
我建议你使用不同的方式来检查评估的顺序。
-
if不必评估其条件(复数);它有正好一个条件。现在这个表达式可能有子表达式,但这不是if关心的问题。if只计算最外层的值,可能会将其转换为bool。
标签: c++ c++11 c++14 integer-division divide-by-zero