Я знаю, что у 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
Кажется, что путь стека правильный ~
Однако вчера я прочитал C ++ Primer Plus, и мне сказали, что cout работает слева направо, каждый раз возвращая объект (cout), поэтому «Это функция, которая позволяет объединять вывод с помощью вставки». Но путь слева направо не может объяснить cout <
Тогда Alnitak скажите мне, что «Оператор << действительно ostream & operator << (ostream & os, int), так что еще один способ написать это:
operator << (operator << (operator << (cout, a), b), c) ", </p>
Если самый правильный аргумент оценивается первым, его можно объяснить.
Теперь я не понимаю, как работает буфер cout, кто-нибудь может мне помочь?