c++ - 当我使用 cout 显示输出时,为什么必须将按位运算符(例如 &、| 等)括在括号中?

标签 c++

我试图通过 cout 流直接显示按位运算的输出。

在这种情况下我会出错:

cout<<a|b 

不过,这似乎可行,

cout<<(a|b);

在算术运算的情况下,

cout<<a+b;

cout<<(a+b);

工作正常。

注意:我认为 ab 是整数。

例如,

int a = 5;
int b = 6;

谁能解释一下这背后的原因?

最佳答案

<<也是一个运算符,所以“将参数传递给”cout与函数的工作方式并不相同。我把它放在引号中是因为你根本没有传递参数,它甚至不是一个函数。 cout是一个为 << 定义了运算符重载的对象运营商。

当你有类似 cout << a | b; 的东西时你最终得到 (cout << a) | b由于Operator Precedence . cout << a部分有效,因为 cout << 过载, 因此该部分返回对 cout 的引用,你最终会做 cout | b ,但是 cout | 没有过载运算符,所以你会得到一个编译错误。

关于c++ - 当我使用 cout 显示输出时,为什么必须将按位运算符(例如 &、| 等)括在括号中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54193393/

相关文章:

c++ - 如何让 Doxygen 显示菱形继承图

c++ - switch 语句和其他错误

c++ - 有或没有虚拟的子类与性能与便利性

c++ - C 和 C++(也可能是 Objective-C)中的 Lint 工具

javascript - 将 C++ 类导出到 duktape

c++ - Opencv 编解码器选择对话框未显示

c++ - MinGW DLL 项目与 Linux 的兼容性

c++ - 为什么在此处添加临时变量会使此编译器错误消失?种类都一样

c++ - 调用Syscall函数时获取异常

c++ - 模板类继承链接器错误