Was ist das C ++ iostream Endl Fiasko?

Ich hörte mir einen Google-Talk von Andrei Alexandrescu über die Programmiersprache D an, als er einen One-Liner über das “endl” -Fiasco rauswarf. Ich dachte nur, dass endl der bevorzugte Weg ist, um das Ende einer Zeile zu markieren und den Puffer für einen Stream zu leeren. Warum wird es als Fiasko betrachtet? Sollte ich es nicht in meinem Code verwenden?

Umschreiben von meinem Kommentar:

(Ich nehme an) Er meint nur, dass viele, besonders neue, C ++ – Programmierer std::endl blind statt '\n' für Newline verwenden, was unnötigerweise unnötig häufig wird und die performance ihres Programms miserabel macht.

Dh, den meisten Leuten wird beigebracht, dass std::endl der kanonische Weg ist, eine neue Zeile in einen Stream einzufügen, obwohl es sehr selten notwendig oder angemessen ist, sie zu leeren.

Es ist die Meinung einiger Leute (* hust *), dass std::endl nicht einmal im Standard sein sollte, da es so selten angemessen ist und keine nennenswerte Tipp-Einsparung gegenüber '\n' < < std::flush trotzdem ist.


TL; DR (s) :

  • Am Ende kauft std::endl nichts, außer normalerweise schlechtere performance und normalerweise mehr Tipparbeit.
  • Es hat seinen Nutzen, aber sie sind wesentlich seltener, als seine Häufigkeit der Verwendung in den meisten großen Codebasen vorschlagen würde, daher ...
  • Sein Nutzen ist höchst fragwürdig und seine Allgegenwart ist absurd - ein Fiasko in der Tat!