cout中的逻辑运算(C ++)

时间:2014-11-16 01:15:54

标签: c++ cout

考虑:

int i = 56, j = 0;
    int n = i&&j;
    cout << i&&j;
    cout << endl << n;
输出将是:

56
0

我想象它可能是因为运算符优先或逻辑短路,但我似乎无法弄清楚哪个或哪个原因

2 个答案:

答案 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