C++ 为什么/何时自动刷新cout缓冲区?
我从中了解到,如果我在不刷新缓冲区的情况下输出字符(使用C++ 为什么/何时自动刷新cout缓冲区?,c++,buffer,cout,C++,Buffer,Cout,我从中了解到,如果我在不刷新缓冲区的情况下输出字符(使用endl或cin),它们在程序结束之前不会出现在我的控制台上 所以我试着做一个无限循环: for(;;) { std::cout << "a" << std::endl; } (;;)的 { std::cout正确的说法是,std::endl或使用std::cin会导致刷新,并立即输出内容。std::endl相当于std::cout.put('\n');std::cout.flush()
endl
或cin
),它们在程序结束之前不会出现在我的控制台上
所以我试着做一个无限循环:
for(;;)
{
std::cout << "a" << std::endl;
}
(;;)的
{
std::cout正确的说法是,std::endl
或使用std::cin
会导致刷新,并立即输出内容。std::endl
相当于std::cout.put('\n');std::cout.flush();
,其中asstd::cin和std::cerr
是tie()
d到std::cout
,因此对其中任何一个的任何操作都会为您执行std::cout.flush()
但是,在第二种情况下,std::cout
仍然有一个底层输出序列(一个std::streambuf
),这是一个指定的大小。一旦此缓冲区已满,流将自动刷新,并将输出发送到控制台。填充此缓冲区就是您所看到的延迟时间。您正确地认为std::endl
,或使用std::cin
,会导致刷新,并且内容将被删除立即输出。std::endl
相当于std::cout.put('\n');std::cout.flush();
,其中asstd::cin
和std::cerr
是tie()
d到std::cout
,因此对其中任何一个的操作都会为您执行std::cout.flush()
但是,在第二种情况下,std::cout
仍然有一个底层输出序列(一个std::streambuf
),它是指定的大小。一旦此缓冲区已满,流将自动刷新,并将输出发送到控制台。填充此缓冲区就是您所看到的延迟时间。否,它会在刷新之前填充缓冲区。缓冲区的大小不是无限的。“它们不会出现在我的控制台上,直到程序结束”-或直到缓冲区满..不,它会在刷新之前填满缓冲区。缓冲区的大小不是无限的。“它们不会出现在我的控制台上,直到程序结束”-或直到缓冲区满。。
for(;;)
{
std::cout << "a";
}