c++ 为什么不执行++y部分?[duplicate]

i1icjdpr  于 2023-01-22  发布在  其他
关注(0)|答案(2)|浏览(139)
    • 此问题在此处已有答案**:

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 ++,我仍然得到相同的答案。

ee7vknir

ee7vknir1#

当您编写x++时,这意味着两件事:

  • 返回 * 当前 * 值
  • 增量x

由于当前值为1010 > 10为false,因此不对&&之后的部分(包括++y)进行求值。
另一种选择是前缀递增,即++x

jv4diomz

jv4diomz2#

如果逻辑AND(&&)运算符的第一个操作数的计算结果为false,则不计算第二个操作数,因为表达式的值是已知的。
来自C++ 20标准(7.6.14逻辑AND运算符)
1 &&运算符从左到右进行分组,两个操作数都根据上下文转换为bool(6.3),如果两个操作数都为true,则结果为true,否则为false,与&不同,&&保证从左到右求值:如果第一个操作数为假,则不计算第二个操作数
此外,带有后增量运算符的表达式的值是其操作数 * 在 * 增量之前的值。
来自C++ 20标准(7.6.1.6增量和减量_
1后缀++表达式的值是其操作数的值。
因此,在if语句中:

if(x++ > 10 && ++y > 20 ){

逻辑AND运算符x++ > 10的左操作数的计算结果为false。但是,后增量运算符的副作用应用于变量x。不计算第二个操作数++y > 20
因此,控制将传递给else语句,在其子语句中,x将等于11y将保持其原始值20

相关问题