关于c ++:为什么三元运算符中的多个语句没有被执行

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)

为什么nb2不等于3


因为操作员的优先权。表达式的计算结果为

1
((a) ? (nb++, nb2++) : nb--), nb2--;

操作员,(comma是最后要处理的事情。这个例子不会编译,但是

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

原因:词汇分析