C ++,三元运算符和cout

时间:2015-07-02 11:55:35

标签: c++ operator-keyword ternary-operator conditional-operator

此代码无效

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

此代码有效

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

无法理解为什么?

2 个答案:

答案 0 :(得分:6)

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

被解析为

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

答案 1 :(得分:1)

这是由运营商优先规则引起的。

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

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

在这种情况下,必须使用括号来获取所需的解析。