- 此问题在此处已有答案**:
Is short-circuiting logical operators mandated? And evaluation order?(7个答案)
2天前关闭。
这就是我的问题,我需要告诉输出:
#include <iostream>
using namespace std;
int main()
{
int x = 10;
int y = 20;
if(x++ > 10 && ++y > 20 ){
cout << "Inside if ";
} else{
cout << "Inside else ";
}
cout << x << “ “ << y;
}
给出的ans是Inside else 11 20
,我用编译器检查了一下,这是正确的答案,但根据我的说法,答案应该是Inside else 11 21
。
为什么会这样,为什么++ y部分没有执行
我也尝试了y ++,我仍然得到相同的答案。
2条答案
按热度按时间ee7vknir1#
当您编写
x++
时,这意味着两件事:x
由于当前值为
10
且10 > 10
为false,因此不对&&
之后的部分(包括++y
)进行求值。另一种选择是前缀递增,即
++x
。jv4diomz2#
如果逻辑AND(
&&
)运算符的第一个操作数的计算结果为false,则不计算第二个操作数,因为表达式的值是已知的。来自C++ 20标准(7.6.14逻辑AND运算符)
1 &&运算符从左到右进行分组,两个操作数都根据上下文转换为bool(6.3),如果两个操作数都为true,则结果为true,否则为false,与&不同,&&保证从左到右求值:如果第一个操作数为假,则不计算第二个操作数。
此外,带有后增量运算符的表达式的值是其操作数 * 在 * 增量之前的值。
来自C++ 20标准(7.6.1.6增量和减量_
1后缀++表达式的值是其操作数的值。
因此,在
if
语句中:逻辑AND运算符
x++ > 10
的左操作数的计算结果为false
。但是,后增量运算符的副作用应用于变量x
。不计算第二个操作数++y > 20
。因此,控制将传递给
else
语句,在其子语句中,x
将等于11
,y
将保持其原始值20
。