运算符<<带 cout 和优先级



这里和这里问题的公认答案表明,这一切都与运算符优先级有关,因此,

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操作,但它是按位移位运算符的过载。

相关内容

  • 没有找到相关文章

最新更新