本文介绍了逗号运算符在C ++中的条件运算符的优先级是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里发生了什么?

#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,但只有左手操作数增量。

The second case seems fine. I would expect both x and y to increment to 1 in the first case but only the left hand operand increments.

推荐答案

第一个等效于:

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

第二个等价于:

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

因此, - y 。在第一行中,首先执行增量,因此预期 x = 1,y = 0 。在第二行中,首先执行 x 的递减,因此预期 x = -1,y = -1

Thus the --y is always executed. In the first line, the increments are executed first so x = 1, y = 0 is expected. In the second line, the decrement of x is executed first so x = -1, y = -1 is expected.

如:

这篇关于逗号运算符在C ++中的条件运算符的优先级是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-16 00:35