C++中条件运算符内逗号运算符的优先级是什么?

2023-12-19

这里发生了什么事?

#include <iostream>
using namespace std;

int main(){

    int x=0,y=0;
    true? ++x, ++y : --x, --y; 
    cout << "x: " << x << endl;
    cout << "y: " << y << endl; //why does y=0 here?

    x=0,y=0;
    false ? ++x, ++y : --x, --y; 
    cout << "x: " << x << endl;
    cout << "y: " << y << endl;
}

x: 1
y: 0

x: -1
y: -1

第二种情况看起来不错。我希望在第一种情况下 x 和 y 都增加到 1,但只有左侧操作数增加。


第一个相当于:

(true  ? (++x, ++y) : (--x)), --y; 

第二个相当于:

(false ? (++x, ++y) : (--x)), --y; 

就这样--y总是被执行。在第一行中,首先执行增量,因此x = 1, y = 0是期待。在第二行中,减少x首先执行所以x = -1, y = -1是期待。


正如评论(另一个答案)中所指出的Barmar https://stackoverflow.com/users/1491895/barmar:

如果有人想知道为什么之间有逗号++x and ++y没有同样的效果,因为(true? ++x)根本无效。所以编译器会不断扫描,直到找到:,但除此之外,当到达较低优先级运算符时它会停止[(,在本例中)或语句结尾].

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中条件运算符内逗号运算符的优先级是什么? 的相关文章

随机推荐