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
- C++中cout的运行机制
- C/C++中cout和printf的运行机制
- C语言中Printf()函数的运行机制
- C++,cout和std::cout的区别
- C++: 避免cout删除小数中0的操作
- C++中cout的含义????
- C/C++中printf、cout输出顺序
- eclipse C/C+ CDT中scanf、cin、 printf、cout不能debug输入输出的问题
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- spring中DispatcherServlet的运行机制
- Spring中DispatcherServlet的运行机制
- .NET中GC的运行机制
- spring中dispatcherservlet的运行机制
- SOA,SOAP,WSDL,UDDI,XML
- 【ACM之旅】瓷砖铺放
- css的框模型速查
- MyActivity
- 在QTextEdit中添加图片
- C++中cout的运行机制
- 浅拷贝与深拷贝
- Oracle时间的问题
- Android AudioRecord类
- Android中dip、dp、sp、pt和px的区别
- .NET考题笔记(个人整理)
- 写了个RHEL下修改网卡的简单脚本
- 在使用AsyncTask和ProgreeDialog时出现leaked window com.android.internal窗口泄露的错误
- 【java】深入理解异常处理机制