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?
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.
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.