为什么我不能写cout << a == b;但是可以写cout <<(a == b);

时间:2019-10-12 19:28:54

标签: c++ syntax-error

我知道()的优先级比<<高,而<<的优先级比==高,但是我想知道为什么我不能写{{1 }}仍可以用C ++编写cout<<a==b;

编译器如何翻译cout<<(a==b);并显示错误?

3 个答案:

答案 0 :(得分:4)

this.updateFoto(aux)的优先级高于this 如您所见here

声明

<<

等同于

==

表达式

cout<<a==b

返回流。将此流与(cout<<a)==b 进行比较。如果没有用于流和cout<<a 的左移位运算符,或者没有用于流和b的比较运算符,则会导致编译器错误

答案 1 :(得分:1)

cout<<a==b(cout<<a) == b相似,因为<<的优先级高于==。如果cout<<a不支持a类型,那么<<在语法上将是错误的。接下来,如果a的{​​{1}}有重载,则语法上又会出错,因为<< operator运算符不能使用==和类型{{1} },除非std::stream重载此比较运算符。

但是对于bb将产生一个cout<<(a==b)值。由于a==b运算符支持boolean的值,因此它是有效的操作。

答案 2 :(得分:1)

<<的优先级高于==,因此它被解释为(cout<<a)==b

但是=较低,因此您可以这样做:

bool t = a == b