cout 中的逻辑运算

Logical operations in cout

本文关键字:逻辑运算 cout      更新时间:2023-10-16

考虑:

int i = 56, j = 0;
int n = i&&j;
cout << i&&j;
cout << endl << n;

其输出将是:

56
0

我想要么是因为运算符优先级,要么是因为逻辑短路,但我似乎无法弄清楚是哪个,或者原因。

表达式 cout << i&&j 等效于 (cout << i) && j 。两个操作数都被计算并转换为 bool 。语句作为一个整体没有效果,但是子表达式cout << i的计算当然具有通常的副作用,即将某些内容写入标准输出。

&&运算符确实短路,只有当cout << i计算为true时才j被评估。这种情况等效于 cout.good() ,通常是这种情况(除非您以某种方式设法关闭标准输出)。

如您所料,<<运算符优先于 &&

因此,cout << i&&j首先输出 i,然后将返回的流与 j 进行比较(两者都为真,因此返回值为 true,但此值被丢弃)。

有关运算符优先级的完整列表,请参阅此处。