質問: C++でのiostreamモジュールで、以下のように出力を行う場合 ``` #include using namespce std; int main() { cout << "Hello World" << endl; } ``` `endl`と同じ改行を意味する`\n`との違いは、バッファをフラッシュするという表現がみられるんですが、これはどういった意味なんでしょうか。 初歩的な質問にはないますが、調べてもよく理解できなかったのでどうかよろしくお願いします。
回答: 画面に文字を表示する際、それが今操作しているパソコンの画面に表示させる場合は、即座に表示できます。ところが、遠隔地からネットワーク経由でリモートログインしている場合は、文字を表示するたびに通信しないといけないのですが、それが結構時間がかかるのです。そこで、1文字ずつ送るのではなく、ある程度まとまった文字数を一気に送るということをします。その、ある程度まとめる役目をしているのがバッファーです。 判りやすく言うと、たくさんの荷物を別の場所に移動させるとき、同じ家の中なら一つ一つ手で運べますが、東京から大阪に運びたい場合は運送業者に運んでもらわないといけません。そのとき、一つ一つ箱詰めして伝票を書いて送っていてはとても時間がかかります。そこで、トラックに積めるだけ積んで一気に送るようにすればかなりの時間が節約できます。 その仕組みが`cout`にもあるのです。 ただ、一つ問題があります。トラックは荷台がいっぱいになるまで発車してくれません。現実の運送会社は確認してくれますが、`cout`はそれほど親切ではありません。何もしなければいつまででも待ち続けます。どういうことかというと、`cout`に送った文字がいつまでたっても画面に表示されない、という現象が起こります。 それでは困るので、「まだ空きがあるかもしれないけど、とりあえず積んだものだけ送っちゃって」と指示するのが「フラッシュ」です。