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。     

猜你喜欢

转载自www.cnblogs.com/LifeoFHanLiu/p/10022407.html