当前位置:  开发笔记 > IOS > 正文

cout和printf的缓冲区和输出序列

如何解决《cout和printf的缓冲区和输出序列》经验,为你挑选了1个好方法。

我知道cout和printf今天有缓冲区,据说缓冲区有点像堆栈,从右到左得到cout和printf的输出,然后从顶部到bottem将它们(到控制台或文件)放出.像这样,

a = 1; b = 2; c = 3;
cout<

然后我写下面的代码,

#include  
using namespace std; 
int c = 6;
int f() 
{   
    c+=1; 
    return c; 
} 

int main() 
{ 
     int i = 0; 
     cout <<"i="<

在VS2005下,输出为

i=0 i++=-1 i--=0
i=0 i++=-1 i--=0
9 8 7
9 8 7

在g ++((GCC)3.4.2(mingw-special))下,输出是,

i=0 i++=0 i--=1
i=0 i++=-1 i--=0
9 8 7
9 8 7

似乎缓冲区就像一个堆栈.但是,我今天读了C++ Primer Plus,据说cout从左到右工作,每次都返回一个对象(cout),所以"这就是让你通过插入连接输出的功能".但是从左到右的方式无法解释cout <输出9 8 7现在我对cout缓冲区如何工作感到困惑,有人可以帮助我吗?



1> 小智..:

输出:

printf("i=%d i++=%d i--=%d\n" , i , i++ ,i-- );

没有具体说明.这是C++的常见缺陷:参数评估顺序未指定.

cout案例不是这样:它使用链式调用(序列点),而不是单个函数的参数,因此评估顺序从左到右很好地定义.

编辑: David Thornley指出上述代码的行为实际上是未定义的.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有