所以这是给我的问题,我需要告诉输出:
#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;
}
给出的答案是Inside else 11 20
,我和编译器核实了一下,这是正确的答案,但根据我的说法,答案应该是Inside else 11 21
。
为什么会发生这种情况?为什么++y部分没有执行?
我也试过y++,我仍然得到同样的答案。
当您编写x++
时,这意味着两件事:
- 返回当前值
- 增量
x
由于当前值为10
,而10 > 10
为false,因此不评估&&
之后的部分,包括++y
。
一种替代方案是前缀增量,即++x
。
如果逻辑AND(&&
)运算符的第一个操作数计算结果为false,则不会计算第二个操作数,因为表达式的值是已知的。
来自C++20标准(7.6.14逻辑与运算符)
1&操作员组从左到右。两个操作数都在上下文中转换为bool(7.3)。如果两个操作都为true,则结果为true,否则为false。与&不同&;保证从左到右求值:如果第一个操作数为false,则不求值第二个操作数。
此外,带有后增量运算符的表达式的值是其操作数在增量之前的值。
来自C++20标准(7.6.1.6增量和减量_
1后缀++表达式的值是其操作数的值。。。
因此,在这个if
语句中:
if(x++ > 10 && ++y > 20 ){
逻辑AND运算符CCD_ 12的左操作数评估为CCD_。然而,后增量运算符的副作用被应用于变量x
。不计算第二个操作数++y > 20
。
因此,控制将传递给else
语句,并且在其子语句中x
将等于11
,并且y
将保持其原始值20
。