rdu-cpp

杨柳不折
随笔 - 13, 文章 - 0, 评论 - 4, 引用 - 0
数据加载中……

cout << 标准输出流的输出顺序

看下面的代码:
 1#include <iostream>
 2using namespace std;
 3
 4int increment(int *i)
 5{
 6    (*i) ++;
 7    return *i;    
 8}

 9
10int main()
11{
12    int a(10);
13    cout << a << '\t' << increment(&a) << '\t' << a << endl;
14    system("pause");
15    return 0;    
16}

输出是什么?
答案是: 不确定。

因为C++标准并没有对cout顺序作出规定,所以这段代码的输出取决于你的编译器。
在VS2005中,输出为:11    11   10
而在dev c++ 4.9.9.2中,输出为: 11    11    11

CSDN上有人讨论过这个问题: http://topic.csdn.net/u/20081120/20/2c57cb9c-0ed6-41b2-9b65-ea182ecf606d.html 
上面有人解释道:

 

发表于:2008-11-20 21:04:546楼 得分:0
C/C++ code
                        
cout的输出是先从右往左读入缓冲区,再从左往右输出; 假设a = 1; b = 2; c = 3; cout<<a<<b<<c<<endl; 缓冲区:|3|2|1|<- (把“<-”看作是指针) 输出:|3|2|<- (输出 1) |3|<- (输出 2) |<- (输出 3) 你的f(a)是直接进入缓冲区的:|7|8|9| 输出<- 缓冲区相当于堆栈的效果。。。
貌似正确,实属误导!

posted on 2009-01-22 12:50 rdu 阅读(750) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理