为什么不是'++y部分是否正在执行



所以这是给我的问题,我需要告诉输出:

#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。与&不同&amp;保证从左到右求值:如果第一个操作数为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

最新更新