55 votes

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

J'écoutais un Conférence google d'Andrei Alexandrescu sur la programmation D quand il a balancé une phrase sur le fiasco de "endl". Je pensais simplement que endl était le moyen privilégié de signifier la fin d'une ligne et de vider le tampon d'un flux. Pourquoi est-ce considéré comme un fiasco ? Ne devrais-je pas l'utiliser dans mon code ?

1 votes

@ildjarn : Vous avez 100% raison. Je savais qu'il vide les tampons et j'ai quand même perdu ~75 points dans l'analyse des données. CEOI 2008 pour ça ! Mauvaises habitudes !

1 votes

@ildjarn Mon professeur insiste pour que nous utilisions std::endl pour tout plutôt que \n ce qui, j'en conviens, est plutôt étrange. Mais là encore, nous n'écrivons que de simples programmes de console. Mais encore une fois, il semble penser que l'initialisation d'une variable (POD) dans une boucle est un problème potentiel de performance...

1 votes

J'ai ajouté le lien, j'ai aussi trouvé le lien sur erdani.com

84voto

ildjarn Points 38377

Reposant sur mon commentaire :

(Je suppose) Il veut simplement dire que de nombreux programmeurs C++, surtout les nouveaux, utilisent std::endl aveuglément au lieu de '\n' pour newline, ce qui entraîne des vidanges inutiles et fréquentes et peut rendre les performances de leur programme catastrophiques.

C'est-à-dire qu'on apprend à la plupart des gens que std::endl est le site manière canonique d'insérer une nouvelle ligne dans un flux, même s'il est très rarement nécessaire ou approprié de l'effacer.

Certaines personnes (dont moi) pensent que std::endl ne devrait même pas figurer dans la norme, car elle est si rarement appropriée et ne représente pas une économie de frappe significative par rapport à la norme '\n' << std::flush de toute façon.

2 votes

Ce n'est un problème que si votre programme effectue beaucoup d'E/S basées sur des flux.

54 votes

A ce jour, certaines personnes l'utilisent en pensant qu'il s'agit de la manière "neutre pour la plate-forme" d'insérer un saut de ligne, sans savoir que \n es le saut de ligne en C, et que \n ->La conversion des terminaisons de lignes spécifiques à la plateforme est gérée par le flux.

7 votes

S'agit-il d'une optimisation prématurée ? Il est agréable d'avoir une ligne finale simple à utiliser pour votre sortie. Surtout si vous apprenez le langage et ne voyez pas immédiatement ce que ' \n ferait l'affaire pour la sortie. Une fois que vous aurez appris à profiler votre code, vous pourrez envisager d'autres options !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X