我知道cout几天前有缓冲区,当我google它时,据说缓冲区有点像堆栈,从右到左获取cout和printf的输出,然后将它们输出(到控制台或文件) 从上到下。像这样,
a = 1; b = 2; c = 3;
cout<<a<<b<<c<<endl;
buffer:|3|2|1|<- (take “<-” as a poniter)
output:|3|2|<- (output 1)
|3|<- (output 2)
|<- (output 3)
然后我在下面写一个代码,
#include <iostream>
using namespace std;
int c = 6;
int f()
{
c+=1;
return c;
}
int main()
{
int i = 0;
cout <<"i="<<i<<" i++="<<i++<<" i--="<<i--<<endl;
i = 0;
printf("i=%d i++=%d i--=%d\n" , i , i++ ,i-- );
cout<<f()<<" "<<f()<<" "<<f()<<endl;
c = 6;
printf("%d %d %d\n" , f() , f() ,f() );
system("pause");
return 0;
}
VS2005下,输出为
i=0 i++=-1 i--=0
i=0 i++=-1 i--=0
9 8 7
9 8 7
看来stack的方式是对的~ 不过昨天看了C++ Primer Plus,据说cout是从左到右的,每次都返回一个object(cout),所以“这就是让你拼接输出的特性通过使用插入”。但是从左到右的方式不能解释 cout<
然后Alnitak告诉我,“<< 运算符实际上是 ostream& operator<<(ostream& os, int),所以另一种写法是: operator<< ( operator<< ( operator<< ( cout, a ), b ), C )”,
如果最正确的论点首先被评估,它可以得到一些解释。
现在我对 cout 的缓冲区如何工作感到困惑,有人可以帮助我吗?