提问人:schwillr 提问时间:7/28/2021 更新时间:7/28/2021 访问量:132
C++ 表达式值(运算符优先)
c++ expression value (operator precedence)
问:
以下表达式:-
int main()
{
int x=2, y=9;
cout << ( 1 ? ++x, ++y : --x, --y);
}
给出以下输出:-
9
根据我的理解,它应该返回 ++y,应该是 10。哪里出了问题?
答:
4赞
Jarod42
7/28/2021
#1
根据算子优先级,
1 ? ++x, ++y : --x, --y
解析为
(1 ? ++x, ++y : --x), --y
评论
2赞
BoBTFish
7/28/2021
在这里,对运算符优先级的解释会有所帮助。
5赞
Ruks
7/28/2021
#2
与逗号运算符 ( 和 ) 相比,三元运算符 ( 和 ) 的优先级更高。因此,首先计算三元条件中的表达式,然后使用逗号运算符拆分语句。?
:
,
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)
这迫使编译器首先计算括号内的表达式,而不考虑运算符的优先级。
评论
(1 ? ++x, ++y : (--x, --y))
1 ? (++x, ++y) : (--x, --y)