zoukankan      html  css  js  c++  java
  • 关于c++ cout输出顺序问题。

     今天看到课本上一个比较费解的例题,就是cout具体的输出问题。先看这个吧:

    void ad(int t)

    {cout<<"this ad is used";

    return t;

    }

    int main()

    {

    cout<<"this main is used"<<ad(9);\

    return 0;

    }

    刚开始我以为他会输出

    this main is usedthis  ad is used 

    可结果不是,恰恰正好想反,先输出后者。经过查证得知cout在c++中就是如此默认的。就是栈的问题。

    cout<<ad就相当于 T operator <<(ostream &cout,ad),参数的入栈顺序就是从右向左。同时求值顺序也是从右到左的。然后进入到缓冲栈之中。当进入输出流时候,就是出栈了,然后显示。

    至于像多个的<<符号的,比方说cout<<a<<b;

    会做如下认为:operator <<((cout<<a),b);

    所以这样的入栈顺序就是先对b入栈了。

    这就说的通了。

    如果是这样:

    int ad(int x)

    {

    cout<<"this ad is used";

    return x;

    }

    int main()

    {

    int x=10;

    cout<<"x="<<x<<"      "<<ad(x);

    return 0;

    }

    这样就应该输出:

    this ad is used x=10    10

    如果还不明白就单步调试,看看调试结果和输出流的asm汇编文件。太长了,我也没看太懂,好多地址跳转。

    有耐心的同学可以好好研究下。

  • 相关阅读:
    jquery easyui 推荐博客 (MVC+EF+EasyUI+Bootstrap)
    添加主键
    SSAS IIS 发布
    NLB
    实现验证码图像文字的识别(C#调用DLL)
    c#中高效的excel导入sqlserver的方法
    C# 控件的缩写
    c#3.0提供的扩展方法
    菜鸟谈谈C#中的构造函数和析构函数
    C#对注册表的操作
  • 原文地址:https://www.cnblogs.com/alin/p/1900298.html
Copyright © 2011-2022 走看看