ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

C++ の endl とか flush の存在意義

C++ を学び始めているんだけど、

cout << "文章を出します。" << endl ;

みたいに書く一方で、まあ

cout << "文章を出します。\n" ;

でも出力は同じわけで、じゃあ、どう違うのか、と気になって調べた。

参考:C++における「std:flushとstd:endlの違い」 : プログラミング学習録
こちらのページが詳しかった。

endl や flush をおこなうことで、バッファにあるものをドッと出すことが出来る。
いちいち出力するよりも、バッファにため続けて最後だけ出力ってした方が動作時間は速くなる。
しかし、デバッグなどの場合はその動作よりも、途中で出力を見たい場合がある。
そういうときに、endl や flush は活用することが出来る、というわけだ。

例えば、

int main(){
  int a = 0 ;
  while(a < 5){
    cout << "a = " << a << ' ' << flush ;
    a += 2 ;
  }
  cout << endl ;
}

の場合は「a=0 」で一度、「a=2 」で一度、「a=4 」で一度と
出力をくり返すのでそのぶん時間がかかってしまう。

これの4行目を

    cout << "a = " << a << ' ' ;

と直すことで、
「a=0 」「a=2 」「a=4 」がすべて揃ってから出力されるという仕組みになるため、
こちらの方が出力が速い。

理解が間違ってなければそういうことらしい。