我对以下内容感到困惑:
#include <iostream>
int main()
{
bool a = true;
int nb = 1;
int nb2 = 2;
a ? nb++, nb2++ : nb--, nb2--;
std::cout << " (nb,nb2) = (" << nb << "," << nb2 << ")";
}
结果:
(nb,nb2) = (2,2)
为什么nb2
不等于3
?
答案 0 :(得分:11)
由于运营商的优先权。您的表达式评估为
((a) ? (nb++, nb2++) : nb--), nb2--;
运营商,
(comma
)是最后要处理的事情。这个例子根本不会编译,而是
条件运算符中间的表达式(在?和:)之间的表达式被解析为括号。
有关详细信息,请参阅C++ Operator Precedence。
答案 1 :(得分:4)
使用paranthesis:
a ? (nb++, nb2++) : (nb--, nb2--);
原因:词汇分析
答案 2 :(得分:4)
这是预期的行为。
编译器将您的表达式理解为:
((a) ? (nb++, nb2++) : nb--), nb2--;
有关详细信息,请参阅: