C++ c++;
我是新来的C++ c++;,c++,C++,我是新来的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&
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;
}
#包括
int v1;
int main()
{
std::coutv1;
std::coutstd::endl只是将EOL(行尾)符号添加到输出中。通常是它的\n,但它可以随操作系统的不同而变化。std::endl只是将EOL(行尾)符号添加到输出中。通常是它的\n,但它可以随操作系统的不同而变化。std::endl只是添加EOL(行尾)符号到输出。通常是它的\n,但它可以随操作系统的不同而变化。std::endl只是将EOL(行尾)符号添加到输出中。通常是它的\n,但它可以随操作系统的不同而变化。在第一行之后,输出在缓冲区中,因此您不会在终端中看到它
在第二行之后,endl
会刷新缓冲区,因此您现在可以在终端输出中看到第1行和第2行
在第三行之后,输出在缓冲区中,在程序退出之前,您不会在终端中看到它
编辑:
当您在第1行和第2行之间放置cin时,会导致cout被冲洗。请参阅:
cin绑定到标准输出流cout(请参阅ios::tie),这表示在cin上执行每个i/o操作之前,cout的缓冲区都被刷新(请参阅ostream::flush)
在第一行之后,输出在缓冲区中,所以在终端中看不到它
在第二行之后,endl
会刷新缓冲区,因此您现在可以在终端输出中看到第1行和第2行
在第三行之后,输出在缓冲区中,在程序退出之前,您不会在终端中看到它
编辑:
当您在第1行和第2行之间放置cin时,会导致cout被冲洗。请参阅:
cin绑定到标准输出流cout(请参阅ios::tie),这表示在cin上执行每个i/o操作之前,cout的缓冲区都被刷新(请参阅ostream::flush)
在第一行之后,输出在缓冲区中,所以在终端中看不到它
在第二行之后,endl
会刷新缓冲区,因此您现在可以在终端输出中看到第1行和第2行
在第三行之后,输出在缓冲区中,在程序退出之前,您不会在终端中看到它
编辑:
当您在第1行和第2行之间放置cin时,会导致cout被冲洗。请参阅:
cin绑定到标准输出流cout(请参阅ios::tie),这表示在cin上执行每个i/o操作之前,cout的缓冲区都被刷新(请参阅ostream::flush)
在第一行之后,输出在缓冲区中,所以在终端中看不到它
在第二行之后,endl
会刷新缓冲区,因此您现在可以在终端输出中看到第1行和第2行
在第三行之后,输出在缓冲区中,在程序退出之前,您不会在终端中看到它
编辑:
当您在第1行和第2行之间放置cin时,会导致cout被冲洗。请参阅:
cin绑定到标准输出流cout(请参阅ios::tie),这表示在cin上执行每个i/o操作之前,cout的缓冲区都被刷新(请参阅ostream::flush)
在第1行之后,cout只包含给定的字符串,没有换行符。
在第二行之后,cout还包含一行结尾,文本显示在控制台窗口中。
在第三行之后,cout包含另一个字符串,其中包括行尾,不一定出现在控制台窗口中。
退出main后,将显示第3行的文本。在第1行之后,cout只包含给定的字符串,没有换行符。
在第二行之后,cout还包含一行结尾,文本显示在控制台窗口中。
在第三行之后,cout包含另一个字符串,其中包括行尾,不一定出现在控制台窗口中。
退出main后,将显示第3行的文本。在第1行之后,cout只包含给定的字符串,没有换行符。
在第二行之后,cout还包含一行结尾,文本显示在控制台窗口中。
在第三行之后,cout包含另一个字符串,其中包括行尾,不一定出现在控制台窗口中。
退出main后,将显示第3行的文本。在第1行之后,cout只包含给定的字符串,没有换行符。
在第二行之后,cout还包含一行结尾,文本显示在控制台窗口中。
在第三行之后,cout包含另一个字符串,其中包括行尾,不一定出现在控制台窗口中。
退出main后,将显示第三行的文本。流包含内存缓冲区,在将数据刷新到最终目的地(在本例中为输出控制台)之前,将在其中写入数据,因为刷新可能是一项昂贵的操作
在某些情况下,缓冲区可能会自动刷新:当流关闭时,或者如果有大量缓冲数据,或者如果流配置为在每行之后刷新,如std::cerr
所示
有时您需要手动刷新,例如,以确保用户看到您写入的内容。std::cout
。这可以通过两种方式完成:
- 在流上调用
flush()
成员函数
- 将
std::flush
操纵器流式处理到流中
std::endl
操纵器执行两项操作:
- 插入一个新行字符(或字符序列),相当于
流包含一个内存缓冲区,数据在刷新到最终目标(在本例中为输出控制台)之前写入该缓冲区,因为刷新可能是一个昂贵的操作
b