Why are multiple statements in ternary operator not executed
本问题已经有最佳答案,请猛点这里访问。
我对以下问题感到困惑:
1 2 3 4 5 6 7 8 9 10 | #include <iostream> int main() { bool a = true; int nb = 1; int nb2 = 2; a ? nb++, nb2++ : nb--, nb2--; std::cout <<" (nb,nb2) = (" << nb <<"," << nb2 <<")"; } |
结果:
1 | (nb,nb2) = (2,2) |
为什么
因为操作员的优先权。表达式的计算结果为
1 | ((a) ? (nb++, nb2++) : nb--), nb2--; |
操作员
The expression in the middle of the conditional operator (between ? and :) is parsed as if parenthesized.
有关详细信息,请参见C++运算符优先级。
这是预期行为。
编译器将您的表达式理解为:
1 | ((a) ? (nb++, nb2++) : nb--), nb2--; |
有关详细信息,请参阅:
- 我们在条件三元运算符中使用逗号时发现了什么?
- https://en.wikipedia.org/wiki/comma_operator网站
使用偏执:
1 | a ? (nb++, nb2++) : (nb--, nb2--); |
原因:词汇分析