gpt4 book ai didi

c++ - if 表达式中的操作顺序是否改变?

转载 作者:IT老高 更新时间:2023-10-28 12:39:56 27 4
gpt4 key购买 nike

我最近遇到了一些我认为我马上就能理解的东西,但想多了,我想了解它为什么会这样工作。

考虑下面的代码。 (x-- == 9) 显然正在评估,而 (y++ == 11) 没有。我的第一个想法是逻辑 && 启动,看到表达式已经变为 false,并在评估表达式的第二部分之前退出。

我想得越多,我就越不明白为什么会这样。据我了解,逻辑运算符按优先顺序低于增量运算。不应该评估 (y++ == 11),即使整个表达式已经变为 false?

换句话说,操作顺序不应该规定 (y++ == 11)if 语句实现整个表达式之前进行评估吗?假的?

#include <iostream>
using namespace std;

int main( int argc, char** argv )
{
int x = 10;
int y = 10;

if( (x-- == 9) && (y++ == 11) )
{
cout << "I better not get here!" << endl;
}

cout << "Final X: " << x << endl;
cout << "Final Y: " << y << endl;
return 0;
}

输出:

Final X: 9
Final Y: 10

最佳答案

logical operators fall below increment operations in the order of precedence.

优先顺序是不是执行顺序。它们是完全不同的概念。优先顺序仅会影响执行顺序,即操作数在其运算符之前被评估,优先顺序有助于告诉您每个运算符的操作数是什么。

短路运算符是一个部分异常(exception),即使是操作数在运算符之前计算的规则,因为它们计算 LHS,然后运算符有其决定是否计算 RHS 的发言权,也许 计算 RHS,然后计算运算符的结果。

不要认为优先级更高的操作“先执行”。想想他们“绑定(bind)得更紧”。 ++ 的优先级高于 &&,在表达式 x++ && y++ 中,运算符优先级表示 + +&&y 的“绑定(bind)更紧密”,因此整个表达式等价于 (x++) && (y++),而不是 (x++ && y)++

关于c++ - if 表达式中的操作顺序是否改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783105/

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