C++、三元运算符和 cout

C++, ternary operator and cout

此代码无效

int main(){
cout << 5 ? (5 ? 0 : 2) : 5;
system("pause");
return 0;
}

此代码有效

int main(){
cout << (5 ? (5 ? 0 : 2) : 5);
system("pause");
return 0;
}

不明白为什么?

cout << 5 ? (5 ? 0 : 2) : 5;

被解析为

(cout << 5) ? (5 ? 0 : 2) : 5;

这是由于运算符优先级规则。

<< 的优先级高于 ?,因此您的第一个表达式被解析为:

(cout << 5) ? (5 ? 0 : 2) : 5;

在这种情况下,括号是必要的,以获得您想要的解析。