O que é o fiasco endl C ++ iostream?

Eu estava ouvindo uma conversa do Google por Andrei Alexandrescu sobre a linguagem de programação D quando ele jogou fora um folheto sobre o fiasco “endl“. Eu apenas pensei que o endl era a maneira preferida de significar o fim de uma linha e liberar o buffer para um stream. Por que é considerado um fiasco? Eu não deveria estar usando no meu código?

Reposting do meu comentário:

(Eu suponho) Ele apenas significa que muitos, especialmente novos, programadores C ++ usam std::endl cegamente em vez de '\n' para newline, descarregando desnecessariamente com freqüência e potencialmente tornando o desempenho de seu programa péssimo.

Ou seja, a maioria das pessoas é ensinada que o std::endl é a maneira canônica de inserir uma nova linha em um stream, embora raramente seja necessário ou apropriado liberá-lo.

É a opinião de algumas pessoas (* cough *) que o std::endl não deveria sequer estar no padrão, pois é tão raramente apropriado e não uma economia de digitação significativa sobre '\n' << std::flush qualquer maneira.


TL; DR (s) :

  • No final, o std::endl não lhe compra nada, exceto geralmente um desempenho pior e, normalmente, mais digitação.
  • Ele tem seus usos, mas eles são consideravelmente mais raros do que sua frequência de uso na maioria das grandes bases de código sugere, portanto ...
  • Sua utilidade é altamente questionável e sua onipresença é absurda - um fiasco de fato!