2

以下表达式:-

int main()
{
    int x=2, y=9;
    cout << ( 1 ? ++x, ++y : --x, --y);
}

给出以下输出:-

9

根据我的理解,它应该返回 ++y,应该是 10。出了什么问题?

4

2 回答 2

5

与逗号运算符 ( ) 相比,三元运算符 ( ?and ) 具有更高的优先级。因此,首先评估三元条件中的表达式,然后使用逗号运算符拆分语句。:,

1 ? ++x, ++y : --x, --y

基本上变成

   (1 ? (++x, ++y) : (--x)), (--y)
/* ^^^^^^^^^^^^^^^^^^^^^^^^ is evaluated first by the compiler due to higher position in
                            the C++ operator precedence table */

您可以通过简单地将表达式括在括号中来消除该问题:

1 ? (++x, ++y) : (--x, --y)

这迫使编译器首先评估括号内的表达式,而不关心运算符的优先级。

于 2021-07-28T13:36:42.770 回答
4

根据运算符优先级

1 ? ++x, ++y : --x, --y

被解析为

(1 ? ++x, ++y : --x), --y

于 2021-07-28T13:26:12.450 回答