\n
を使用できるのに、endl
でcout
を使用する理由はありますか?私のC++本はendlを使用するように言っていますが、その理由はわかりません。 \n
はendl
ほど広くサポートされていませんか、それとも何か不足していますか?
endl
は_'\n'
_をストリームに追加しますandflush()
ストリーム上。そう
_cout << x << endl;
_
に等しい
_cout << x << '\n';
cout.flush();
_
ストリームは、ストリームがフラッシュされるときに実際にストリーミングされる内部バッファーを使用する場合があります。 cout
の場合、cin
と何らかの形で同期(tied)されるため、違いに気付かない場合がありますが、ファイルストリームなどの任意のストリームでは、たとえばマルチスレッドプログラムの違いに気付くでしょう。
ここ は、フラッシュが必要な理由に関する興味深い議論です。
endl
は、\n
文字の単なるエイリアス以上のものです。何かをcout
(またはその他の出力ストリーム)に送信すると、データはすぐには処理および出力されません。例えば:
cout << "Hello, world!";
someFunction();
上記の例では、出力がフラッシュされる前に関数呼び出しが実行を開始する可能性がsomeあります。 endl
を使用すると、2番目の命令が実行される前に強制的にフラッシュが実行されます。また、 ostream::flush
関数を使用して確認することもできます。