gpt4 book ai didi

c++ - 运算符优先级和评估顺序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:01 30 4
gpt4 key购买 nike

我无法理解这个程序的输出:

#include<iostream>
using namespace std;
int main()
{
int x = 1 , y = 1, z = 1;
cout << ( ++x || ++y && ++z ) << endl; //outputs 1;
cout << x << " " << y << " " << z ; //x = 2 , y = 1 , z = 1;
return 0;
}

输出:

1
2 1 1

如果首先评估 || 那么这个输出是好的,然而 this文章说 &&|| 具有更高的优先级,因此必须先对其求值。如果是这种情况,那么根据我的输出应该是:

1
1 2 2

因为 ++y &&++z 会评估为 true 因此 ++x 不会被评估。

最佳答案

让我们把多余的括号放在:

(++x || (++y &&++z ))

然后很容易看出 (++y &&++z )++x 为 0 时被计算。因此您可以看到,无论运算符优先级如何,|| 的短路性质意味着仅当左侧为 0 时才评估右侧。

(如果计算右侧,请注意如果 ++y 不为 0,++z被计算.)

关于c++ - 运算符优先级和评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126127/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com