一、相关概念
缓冲区(buffer): 如果要输出一串字符串,为了避免每输入一个字母就把其输出到输出装置中(显示器控制台),设立了一个内部数据结构叫buffer,其可以累计要输出的字符,等有需要一并输出的时候,它才将此字符串整个输出,从而刷新buffer!
buffer刷新原因:1.缓冲区满了(如何更改缓冲区的大小;缓冲区会自动根据需要增加吗)
2.从标准库读入数据,如使用cin; (使用cerr也会刷新缓冲区)
3.明确要求刷新,如endl(其作用为换行并刷新缓冲区, <<endl;相当于<<"\n"<<flush; 但是用户感觉到的是输出字符串再换行!为什么步骤不一致 )
buffer是栈的一部分吗?
二、区别
cerr--无缓冲标准错误,发送给它的内容立即被输出,只能在显示器输出! 此当调用栈用完,没有缓冲区来用clog,这时候还有cerr!!!!!
clog(console log)--有缓冲标准错误,缓冲区满时或有需要时输出,在显示器输出
cout--有缓冲标准输出,通常在显示器输出,但是可以重定向输出到文件,如txt
三个都是ostream类定义的输出流对象,
cout是在终端显示器输出, cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据, 当向cout流插入一个endl, 不论缓冲区是否满了,都立即输出流中所有数据, 然后插入一个换行符.
cerr流对象是标准错误流,指定为和显示器关联,和cout作用差不多
clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出。
三、重定向问题?
其他相关问题
难道语句分号也能刷新缓冲区?https://zhidao.baidu.com/question/568955123.html