今日、cout と printf にはバッファがあることを知っています。バッファはスタックのようなもので、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
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 のバッファの仕組みについて混乱しています。誰か助けてもらえますか?