为何终端输出缓冲区在\n与endl下均会被刷新?
C++输出缓冲区:
\n与endl的行为困惑 我了解换行符\n不会刷新输出缓冲区,而endl会。刷新缓冲区指将缓冲区中所有内容发送至目标文件(此处为终端)。
以下是通过在main函数中抛出异常让运行时捕获的可复现示例:
示例1
int main() { cout<<"ABC"; throw 0; }
该程序符合预期,终端未输出ABC。
示例2
int main() { cout<<"ABC"<<endl; throw 0; }
该程序输出ABC,这符合endl会刷新缓冲区的认知。
示例3
int main() { cout<<"ABC"<<"\n"; throw 0; }
但令我困惑的是,既然\n不会刷新终端缓冲区,这个程序的行为应与第一个示例一致,可实际上它却在终端输出了ABC。这难道不违背\n不刷新缓冲区的结论吗?
内容的提问来源于stack exchange,提问作者Himanshu Poddar
相关产品推荐
相关产品推荐

