Что такое фиаско C ++ iostream endl? - PullRequest
50 голосов
/ 31 марта 2011

Я слушал гугловский доклад Андрея Александреску о программировании на языке D, когда он выбросил одну строчку о фиаско "endl".Я просто подумал, что endl был предпочтительным способом обозначить конец строки и очистить буфер для потока.Почему это считается фиаско?Разве я не должен использовать это в своем коде?

1 Ответ

72 голосов
/ 31 марта 2011

Перепост из моего комментария:

(я предполагаю) Он просто означает, что многие, особенно новые, программисты на C ++ используют std::endl вслепую вместо '\n' для перехода на новую строку, излишне часто сбрасывая и потенциально снижая производительность своей программы.

Т.е. большинство людей учат, что std::endl - это канонический способ вставки новой строки в поток, даже если это очень редко необходимо или уместно очищать его.

По мнению некоторых людей (* кашель *), std::endl не должно быть даже в стандарте, так как это очень редко уместно, и в любом случае значительная экономия не набирает '\n' << std::flush.


* * TL тысяча двадцать-одна; DR * * 1 022 (с) * 1 023 *:

  • В конце концов, std::endl ничего не покупает, кроме обычно хуже производительности и обычно больше набора текста.
  • У него есть свои применения, но они значительно реже, чем можно предположить по частоте его использования в большинстве больших кодовых баз ...
  • Его полезность весьма сомнительна, а его повсеместность абсурдна - действительно, фиаско!
...