667 votes

C++ : « std::endl » vs « \n »

Beaucoup de livres C++ contiennent du code exemple comme ça...

.. .alors j’ai toujours fait cela aussi. Mais j’ai vu beaucoup de code du travail aux développeurs comme ça au lieu de cela :

Y a-t-il une raison technique de privilégier l’une sur l’autre, ou est-ce juste une question de style de codage ?

545voto

David Thornley Points 39051

La variation de la ligne de fin de caractères n'a pas d'importance, en supposant que le fichier est ouvert en mode texte, qui est ce que vous obtenez si vous ne le demandez pour les binaires. Le programme compilé va écrire la bonne chose pour le système compilé.

La seule différence est qu' std::endl vide le tampon de sortie, et '\n' ne le fait pas. Si vous ne voulez pas le tampon de rincer fréquemment, utilisez '\n'. Si vous n' (par exemple, si vous voulez obtenir à la sortie, et le programme est instable), utilisez std::endl.

291voto

Loki Astari Points 116129

La différence peut être illustrée par l'exemple suivant:

std::cout << std::endl;

est équivalent à

std::cout << '\n' << std::flush;

Donc,

  • Utiliser std::endl Si vous souhaitez vigueur immédiatement rincer à la sortie. si vous êtes dans une application en ligne de commande et souhaitez garantir que l'utilisateur peut voir le résultat immédiatement.
  • Utiliser \n si vous êtes inquiet au sujet de la performance (qui n'est probablement pas le cas si vous utilisez l' << opérateur).

J'utilise \n sur la plupart des lignes.
Ensuite, utilisez std::endl à la fin d'un paragraphe, mais c'est l'habitude, il n'est généralement pas nécessaire).

Contrairement à d'autres revendications, l' \n personnage est mappé à la plate-forme correcte fin de la séquence de ligne uniquement si le flux est d'aller vers un fichier (std::cin et std::cout être spécial, mais encore des fichiers (ou des fichiers)).

47voto

Martin Beckett Points 60406

Il pourrait y avoir des problèmes de performances, `` oblige un vidage du flux de sortie.

36voto

Nathan Points 39

Il y a un autre appel de fonction impliqué là-dedans si vous allez utiliser std::endl

un opérateur d’appels

22voto

Ferruccio Points 51508

Ils écriront tous deux les caractères de fin de ligne appropriés. En plus de cela, endl provoquera le tampon d’être commis. Vous ne voulez généralement pas utiliser endl lorsque vous faites file i/o, parce que les validations inutiles peuvent avoir un impact performance.

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