首先看一个例子:
int fun1()
{
cout<<"num1"<<endl;
return 1;
}
int fun2()
{
cout<<"num2"<<endl;
return 2;
}
int main()
{
cout<<fun1()<<" "<<fun2()<<endl;
return 0;
}
输出结果是
num2
num1
1 2
为什么呢?为什么不是num11num22呢?这里涉及到cout输出流的执行顺序问题。
cout的输出顺序有如下规律:
计算顺序:自右至左
输出顺序:自左至右
cout作为输出流,有一个缓冲区,先从右往左将输出读入缓冲区,在从缓冲区中读出(类似堆栈)
假设a = 1; b = 2; c = 3;
cout<<a<<b<<c<<endl;
缓冲区:|3|2|1|<- (把“<-”看作是指针)
输出:|3|2|<- (输出 1)
|3|<- (输出 2)
|<- (输出 3)
结果就是123.
在一开始的例子中,从右往左读入,先执行fun2(),输出num2,并将返回值2保存进缓冲区,再执行fun1(),输出num1,并将返回值1保存进缓冲区。最后开始读取缓冲区中的内容,输出1 2。
本文深入探讨了C++中cout输出流的执行顺序问题,解释了为何输出顺序与计算顺序相反的现象。通过具体示例,揭示了cout缓冲区的工作原理,即计算顺序自右至左,而输出顺序自左至右。
2430

被折叠的 条评论
为什么被折叠?



