cout连续输出的问题
1.案列
先上一段代码,这段代码本来是想从队列中依次取出队头元素,我期望得到的结果是1,2,3,4,然而最后得到的结果却是4,3,2,1。
1 #include<iostream> 2 #include<queue> 3 using namespace std; 4 int getvalue(queue<int> & myqueue) 5 { 6 int front = myqueue.front(); 7 myqueue.pop(); 8 return front; 9 } 10 int main() 11 { 12 queue<int>myqueue; 13 myqueue.push(1); 14 myqueue.push(2); 15 myqueue.push(3); 16 myqueue.push(4); 17 cout << "1:" << getvalue(myqueue) << " 2:" << getvalue(myqueue) << " 3:" << getvalue(myqueue) << " 4:" << getvalue(myqueue) << endl; 18 }
后来在网上搜索了一番得到的结论是,cout的计算顺序是从右向左,cout的输出顺序是从左向右。这就解释了为什么最后得到的结果是4,3,2,1了,17行的代码从右往左依次调用函数getvalue(myqueue)得到的结果1,2,3,4
最后按从左往右的顺序输出4,3,2,1。
2.练习
最后上两个小练习,看网上很多人都没讲清楚。
1. int i = 2;cout << i << i++ << ++i << endl;
注意++i返回的是引用,++i是先对i值做了加法再使用;i++返回的是值,++i是先使用值再做加法。
首先按照从右往左的计算顺序得到++i => 3 (先对i值做了加法) ;i++ => 3(先使用值),i => 4(得到4是前面i++造成的),最后由于++i返回的是引用,所以最后i值是几,++i那个位置就是几,所以最终++i那个位置的值是4。因此,最后输出结果为434。
2. int i = 0;cout << ++i << ++i << ++i << endl;
有了上一题的经验,这道题就没什么好说的了,由于++i返回的是引用,最终输出333。