这里和这里问题的公认答案表明,这一切都与运算符优先级有关,因此,
cout << i && j ;
被评估为
(cout << i) &&j ;
因为位运算符的优先级大于逻辑运算符的优先级。(这里不是按位运算符,而是符号本身设置优先级。(
我想知道为什么下面的代码没有输出1:
int x=2, y=1 ;
cout << x>y ;
因为关系运算符的优先级大于逐位运算符;最后一行应该被处理为CCD_ 1。
我收到一个警告,重载的operator<<
比比较运算符具有更高的优先级。
与所有其他现有运算符相比,重载operator<<
的优先级是多少?
有人告诉重载运算符的优先级<lt;与所有其他现有运营商相比?
插入器<<
的优先级高于关系型operator<
、operator>
等。请参阅运算符优先级。
这意味着cout << x>y
被分组为(而不是评估为(:
(cout << x)>y;
现在,cout << x
返回对cout
的引用,然后将其用作cout << (x>y) ;
0的左手操作数。但是,由于不存在以cout
为左手操作数、以int
为右手操作数的重载operator>
,因此会得到如下错误:
error: no match for ‘operator>’ (operand types are ‘std::basic_ostream’ and ‘int’)
注意
此外,在你的问题中,你使用了短语"被评价为">这是不正确的。正确的短语应该是"em";被分组为"。
根据C++引用(https://en.cppreference.com/w/cpp/language/operator_precedence),逐位移位运算符的优先级大于关系运算符的优先级。尽管cout <<
是一个I/O操作,但它是按位移位运算符的过载。