为什么三元运算符中的多个语句未执行

时间:2016-08-02 15:37:40

标签: c++ ternary-operator

我对以下内容感到困惑:

#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

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--;

有关详细信息,请参阅: