关于C++中的输出问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 18:33:54
我有这么一句语句
cout<<"你好"<<function(4)<<endl;
其中function()是一个函数,4是参数。
在函数里面开头是
void function()
{
cout<<"XXXXXXXX"<<endl;
。。。。。
}
我发现那窜函数里面的文字比“你好”要先输出。我想问问为什么。。

在执行输出操作之后,数据并非立刻传到输出设备,而是先进入一个缓冲区,当适宜的时机(如cout执行结束)后再由缓冲区传入,也可以通过操纵符flush进行强制刷新
也就是说cout首先将 你好 存入缓冲区并不直接输出,再执行函数,而函数里又出现cout,将函数里的cout存入另外外的缓冲区,然后函数中的COUT首先结束,先刷新了函数里的cout缓冲区并将数据显示在屏幕上,然后函数返回,继续执行第一个cout后的endl,刷新缓冲区,将 你好 显示出来
主函数的cout——将你好存入缓冲区1——调用function中的COUT——将“xxxxx”存入缓冲区2——刷新缓冲区2,显示“XXXXX”——函数返回,刷新缓冲区1显示 你好

首先你的函数没有带参数,而调用的时候带参数,其次你的函数没有是void,也就是无返回值,在cout后输出就有问题。你的程序没报错,我想问问为什么?

这样的代码能编译通过吗????

你的程序应该编译不通过。
#include<iostream>
using namespace std;
int f()
{
cout<<"OK"<<endl;
return 1;
}
int main()
{
cout<<"你好"<<f()<<endl;
return 0;
}
以这个程序为例,在执行cout<<"你好"<<f()<<endl;时,从右向左执行压入缓冲区栈,因此是先执行函数,输出“OK”,然后把函数返回值压入栈,再压入“你好”,然后把缓冲区的内容输出。运行结果是
OK
你好1
这就解释了输出顺序问题
再比如:
#include<iostream>
using namespace std;
int main()
{
int a=1;
cout<<a<<(