递增和按位移位运算符优先级?

时间:2017-04-01 04:45:26

标签: c++

增量后缀和前缀都是比按位左移更高的运算符优先级,但以下打印出不同的结果。

int testValue = 1;
std::cout << ++testValue; //prints 2
//saw it as std::cout << (++testValue);

testValue = 1;
std::cout << testValue++; //prints 1
//thought it was std::cout << (testValue++);

为什么在插入之前第二个示例中显示的增量后缀打印1?我认为它与增量前缀情况下的testValue绑定得更紧密,所以我认为在使用std::cout打印之前,它会先增加。

2 个答案:

答案 0 :(得分:4)

<<不是按位运算符,而是insertion operatorcplusplus参考:

  

作为类ostream的对象,也可以将字符写入其中   作为使用插入运算符的格式化数据(运算符&lt;&lt;)。

testValue = 1;
std::cout << testValue++; //prints 1

后增量表示在读取变量后完成增量。

答案 1 :(得分:2)

你误解了testValue++的作用。

它递增testValue但它的评估是在增量之前。

该行

std::cout << testValue++; 

相当于

std::cout << testValue;
testValue = testValue + 1;