我知道()
的优先级比<<
高,而<<
的优先级比==
高,但是我想知道为什么我不能写{{1 }}仍可以用C ++编写cout<<a==b;
。
编译器如何翻译cout<<(a==b);
并显示错误?
答案 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
重载此比较运算符。
但是对于b
,b
将产生一个cout<<(a==b)
值。由于a==b
运算符支持boolean
的值,因此它是有效的操作。
答案 2 :(得分:1)
<<
的优先级高于==
,因此它被解释为(cout<<a)==b
但是=
较低,因此您可以这样做:
bool t = a == b