web-dev-qa-db-ja.com

C ++ iostream endlの大失敗とは何ですか?

私は Dプログラミングに関するAndrei Alexandrescuによるグーグルトーク 言語を聞いていました。彼は「endl」の大失敗について1つのライナーを投げました。私は、endlが行の終わりを示し、ストリームのバッファーをフラッシュするための好ましい方法だと思っていました。なぜそれは大失敗と見なされますか?コードで使用するべきではありませんか?

52
Tod

私のコメントからの再投稿:

(私は推測します)彼は、多くの、特に新しいC++プログラマーが改行にstd::endlの代わりに'\n'を盲目的に使用し、不必要に頻繁にフラッシュし、プログラムのパフォーマンスをひどくする可能性があることを意味します。

つまり、ほとんどの人は、std::endlthe改行をストリームに挿入するための標準的な方法であると教えられていますが、それは非常にまれです必要またはそれをフラッシュするのに適切です。

std::endlが標準に含まれるべきではないという意見(*咳*)もあります。これは、適切なことはめったになく、重要な入力の節約ではないためです。 '\n' << std::flushとにかく。


TL; DR(s)

  • 結局、std::endlは、通常はパフォーマンスが悪い通常はもっと入力する以外は何も購入しません。
  • 用途はありますが、ほとんどの大規模なコードベースでの使用頻度が示唆するよりもかなりまれです。
  • その有用性は非常に疑わしく、その遍在性はばかげています–確かに大失敗です!
72
ildjarn