Что такое С++ iostream endl fiasco?

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

Ответ 1

Отмена моего комментария:

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

I.e., большинство людей учат, что std::endl является каноническим способом вставки новой строки в поток, хотя это очень редко необходимо или целесообразно очистить.

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


TL; DR :

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