web-dev-qa-db-fra.com

Pourquoi utiliser endl quand je peux utiliser un caractère de nouvelle ligne?

Existe-t-il une raison d'utiliser endl avec cout alors que je ne peux utiliser que \n? Mon livre C++ dit d'utiliser endl, mais je ne vois pas pourquoi. Est \n n'est pas supporté aussi largement que endl, ou est-ce que quelque chose me manque?

56
Moshe

endl ajoute '\n' Au flux et appelle flush() sur le flux. Alors

cout << x << endl;

est équivalent à

cout << x << '\n';
cout.flush();

Un flux peut utiliser un tampon interne qui est effectivement diffusé lorsque le flux est vidé. Dans le cas de cout, vous ne remarquerez peut-être pas la différence car elle est en quelque sorte synchronisée ( liée ) avec cin, mais pour un flux arbitraire, tel que flux de fichiers, vous remarquerez une différence dans un programme multithread, par exemple.

Ici une discussion intéressante sur les raisons pour lesquelles le rinçage peut être nécessaire.

73
Armen Tsirunyan

endl est plus qu'un simple alias pour le \n personnage. Lorsque vous envoyez quelque chose à cout (ou à tout autre flux de sortie), les données ne sont pas traitées et exportées immédiatement. Par exemple:

cout << "Hello, world!";
someFunction();

Dans l'exemple ci-dessus, il y a quelques chances que l'appel de fonction commence à s'exécuter avant que la sortie ne soit vidée. En utilisant endl, vous obligez le vidage à avoir lieu avant l'exécution de la deuxième instruction. Vous pouvez également vous en assurer avec le ostream::flush fonction.

6
Paul Manta