我是新来C++的学习C++ Primer书.在第一章中,笔者谈到的缓冲区iostream,cout和endl.我无法理解.我这里有两个示例代码.
#include<iostream>
int v1;
int main()
{
std::cout<<"First Cout!";
std::cin>>v1;
std::cout<<"Second Cout!"<<std::endl;
std::cout<<"Third Cout!\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道cout执行每一行后缓冲区的状态.
该流包含一个内存缓冲区,其中数据在被刷新到最终目标(在本例中为输出控制台)之前被写入,因为刷新可能是一项昂贵的操作.
在某些情况下,缓冲区可能会自动刷新:当流关闭时,或者存在大量缓冲数据,或者流配置为在每行之后刷新,原样std::cerr.
有时您需要手动刷新,例如以确保用户看到您写入的内容std::cout.这可以通过两种方式完成:
flush()在流上调用成员函数;std::flush操纵器流入流中.该std::endl机械手做了两两件事:
<< '\n'; 然后<< std::flush,(反过来调用流的flush()成员函数).这对于将短消息写入控制台很有用; 但应小心使用,因为它在产生大量输出时会产生相当大的性能影响.
更复杂的是,一个流可以绑定到另一个流,以便在访问另一个流之前刷新一个流.在这种情况下,cout绑定cin,这就是为什么你在读取之前看到第一个输出,cin即使没有显式刷新.
最后,所有标准流(包括)cout在程序结束时自动刷新(特别是,当全局实例std::ios_base::Init被销毁时;但这是一个你不应该知道的细节.)