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

sta*_*ant 3 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 << ")";
}
Run Code Online (Sandbox Code Playgroud)

结果:

(nb,nb2) = (2,2) 
Run Code Online (Sandbox Code Playgroud)

为什么nb2不等于3

Dmi*_*lov 11

因为运营商的优先权.你的表达式评估为

((a) ? (nb++, nb2++) : nb--), nb2--;
Run Code Online (Sandbox Code Playgroud)

Operator ,(comma)是最后要处理的东西.这个例子根本不会编译

条件运算符中间的表达式(在?和:)之间的表达式被解析为括号.

有关详细信息,请参阅C++ Operator Precedence.