zoukankan      html  css  js  c++  java
  • 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。     

  • 相关阅读:
    ASP.NET 下载文件方式
    分享各大平台接口(空间,微博)
    BitmapToASCii
    C#操作进程(Process)
    Config ConnectionStrings
    Import Excel void (NPOI)
    C# Serialize
    C# 属性
    调用存储过程的方法
    Redis配置与安装
  • 原文地址:https://www.cnblogs.com/LifeoFHanLiu/p/10022407.html
Copyright © 2011-2022 走看看