web-dev-qa-db-ja.com

改行文字を使用できるのに、なぜendlを使用するのですか?

\nを使用できるのに、endlcoutを使用する理由はありますか?私のC++本はendlを使用するように言っていますが、その理由はわかりません。 \nendlほど広くサポートされていませんか、それとも何か不足していますか?

56
Moshe

endlは_'\n'_をストリームに追加しますandflush()ストリーム上。そう

_cout << x << endl;
_

に等しい

_cout << x << '\n';
cout.flush();
_

ストリームは、ストリームがフラッシュされるときに実際にストリーミングされる内部バッファーを使用する場合があります。 coutの場合、cinと何らかの形で同期(tied)されるため、違いに気付かない場合がありますが、ファイルストリームなどの任意のストリームでは、たとえばマルチスレッドプログラムの違いに気付くでしょう。

ここ は、フラッシュが必要な理由に関する興味深い議論です。

73
Armen Tsirunyan

endlは、\n文字の単なるエイリアス以上のものです。何かをcout(またはその他の出力ストリーム)に送信すると、データはすぐには処理および出力されません。例えば:

cout << "Hello, world!";
someFunction();

上記の例では、出力がフラッシュされる前に関数呼び出しが実行を開始する可能性がsomeあります。 endlを使用すると、2番目の命令が実行される前に強制的にフラッシュが実行されます。また、 ostream::flush 関数を使用して確認することもできます。

6
Paul Manta