Qu’est-ce que le fiasco endl C ++ iostream?

J’écoutais un discours de google d’Andrei Alexandrescu sur le langage de programmation en D lorsqu’il a jeté un seul article sur le fiasco “endl“. Je pensais juste que endl était la méthode préférée pour indiquer la fin d’une ligne et vider le tampon pour un stream. Pourquoi est-ce considéré comme un fiasco? Ne devrais-je pas l’utiliser dans mon code?

Republier de mon commentaire:

(Je suppose) Il veut simplement dire que beaucoup de programmeurs C ++, en particulier les nouveaux, utilisent std::endl place de '\n' pour newline, vidant inutilement fréquemment et rendant potentiellement les performances de leur programme anormales.

C’est-à-dire que la plupart des gens apprennent que std::endl est la manière canonique d’insérer une nouvelle ligne dans un stream, même s’il est très rarement nécessaire ou approprié de la vider.

C’est l’opinion de certaines personnes (* cough *) que std::endl ne devrait même pas être dans la norme, car il est si rarement approprié et pas une économie de frappe significative par rapport à '\n' << std::flush toute façon.


TL; DR (s) :

  • En fin de compte, std::endl ne vous achète rien, sauf généralement moins bonnes performances et généralement plus de frappe.
  • Il a ses usages, mais ils sont considérablement plus rares que ne le suggèrent sa fréquence d'utilisation dans la plupart des bases de code volumineuses, donc ...
  • Son utilité est hautement discutable et son omniprésence est absurde - un fiasco en effet!