考虑:
int i = 56, j = 0;
int n = i&&j;
cout << i&&j;
cout << endl << n;
输出将是:
56
0
我想象它可能是因为运算符优先或逻辑短路,但我似乎无法弄清楚哪个或哪个原因
答案 0 :(得分:6)
表达式cout << i&&j
相当于(cout << i) && j
。两个操作数都被评估并转换为bool
。整个声明没有任何效果,但子表达式cout << i
的评估通常会产生副作用,即将某些内容写入标准输出。
&&
运算符确实已短路,j
仅在cout << i
评估为true
时才会被评估。这种情况相当于cout.good()
,通常就是这种情况(除非你设法关闭标准输出)。
答案 1 :(得分:1)
如您所料,<<
运算符优先于&&
。
因此,cout << i&&j
首先输出i,然后将返回的流与j进行比较(两者都为真,因此返回的值为true,但该值被丢弃)。
有关运算符优先级的完整列表,请参阅here。