C++中cout的运行机制

来源:互联网 发布:文泰刻字机com端口设置 编辑:程序博客网 时间:2024/05/07 02:13

关于C++中cout的使用,相信大家再熟悉不过了,然而对于cout是如何输出的?输出的机制是啥,需要进一步的了解。本章娓娓道来。前几天在网上看到这么一个题目:

#include <iostream>using namespace std;int hello1();int hello2();int main() {    int a, b;    cout<<"a="<<hello1()<<" b="<<hello2()<<endl;    return 0;}int hello1(){    cout<<"hello1"<<endl;    return 1;}int hello2() {    cout<<"hello2"<<endl;    return 2;}

最终输出是:
hello2
hello1
a=1 b=2
一时让人有点难以琢磨,网上给出了其靠谱的解释:cout流的操作顺序是:先从右往左读入缓冲区,然后再从左往右输出。所以它从右边往左读的时候,碰到了函数当然去执行函数先了,然后把函数返回值读入缓冲区再然后。。。就是从左输出了。


  根据这个解释,有实验的几个程序,能加深点理解


程序1:

#include <iostream>using namespace std;int main() {     int b[2]={1,2};    int *a=b;    cout<<*a<<" "<<*(a++)<<endl;system("pause");    return 0; }

输为出:2 1。
解释:先读入*(a++),对于a++,是先读入缓冲区,其自增,所以,此时缓冲区中的a是1,。再读入*a,此时a已自增,所以读入缓冲区的是2.


程序2:

#include <iostream>using namespace std;int main() {     int i=5;    cout<<i<<" "<<(i++)<<" "<<(++i)<<endl;<span style="white-space:pre"></span>system("pause");    return 0; }
输出为:7 6 7
解释:从右往左,先是(++i),即先自增,再读入缓冲区,为7。再是(i++),即先读入缓冲区,为6,再自增。最后是i,读入缓冲区为7

(这里有个小问题)我在vs2005 以及ubuntu 14.04测试都是 7 6 7,博主是7 6 6,我认为这里可能与编译器有关。


文章转自:http://www.cnblogs.com/dong008259/archive/2011/12/03/2274940.html



0 0
原创粉丝点击