C++中 \n 与 endl 的区别是什么?

原文: C++ 教程

   KgdBukn

C++中 "\n" 与 endl 的区别是什么?

"\n" 表示内容为一个回车符的字符串。std::endl 是��作�,输出的作用和输出 "\n" 类似,但�能略有区别。

std::endl 输出一个�行符,并立�刷新缓冲区。

例如:

std::cout << std::endl;

相当于:

std::cout << '\n' << std::flush;
或者
std::cout << '\n'; std::fflush(stdout);

由于��作符 << 的�载,对于 '\n' 和 "\n",输出效果相�。

对于有输出缓冲的�(例如cout�clog),如果�手动进行缓冲区刷新�作,将在缓冲区满�自动刷新输出。�过对于 cout �说(相对于文件输出�等),缓冲一般体现得并�明显。但是必�情况下使用 endl 代替 '\n' 一般是个好习惯。

对于无缓冲的�(例如标准错误输出�cerr),刷新是�必�的,�以直接使用 '\n'。

更多解�

  æ˜Ÿé“­ cainiao

"\n" 表示一个字符串,�有一个数�是回车符。

'\n' 表示一个字符。

这两个在输出上是一样的�

关于 endl:

1�在 C++ 中,终端输出�行时,用 cout<<......<<endl 与 "\n" 都�以,这是�级的认识。但二者有��的区别,用 endl 时会刷新缓冲区,使得栈中的东西刷新一次,但用 "\n" �会刷新,它�会�行,�内数�没有�化。但一般情况,二者的这点区别是很�的,在大的程�中�能会用到。建议用 endl ��行。

2�endl 除了写 '\n' 进外,还调用 flush 函数,刷新缓冲区,把缓冲区里的数�写入文件或�幕.考虑效率就用 '\n'。

3�cout *lt;< endl; 除了往输出�中�入一个 '\n' 还有刷新输出�的作用。

cout << endl; 
等价于: 
\cout << '\n' << flush;

在没有必�刷新输出�的时候应尽�使用 cout << '\n', 过多的 endl 是影�程�执行效率低下的因素之一。