J'apprends le C ++ et j'ai trouvé quelque chose que je ne comprends pas:
Les tampons de sortie peuvent être explicitement vidés pour forcer l'écriture du tampon. Par défaut, la lecture des
cin
vidagescout
;cout
est également vidé lorsque le programme se termine normalement.
Donc vider le tampon (par exemple un tampon de sortie): est-ce que cela efface le tampon en supprimant tout ce qu'il contient ou efface-t-il le tampon en sortant tout ce qu'il contient? Ou est-ce que rincer le tampon signifie quelque chose de complètement différent?
Vous avez cité la réponse:
Autrement dit, vous devrez peut-être "vider" la sortie pour qu'elle soit écrite dans le flux sous-jacent (qui peut être un fichier ou, dans les exemples répertoriés, un terminal).
Généralement, stdout / cout est mis en tampon en ligne: la sortie n'est pas envoyée au système d'exploitation jusqu'à ce que vous écriviez une nouvelle ligne ou vidiez explicitement le tampon. L'avantage est que quelque chose comme
std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
provoque une seule écriture dans le "fichier" sous-jacent au lieu de six, ce qui est bien meilleur pour les performances. L'inconvénient est qu'un code comme:sortira
.....
immédiatement (pour unesleep
implémentation exacte , voir cette question ). Dans de tels cas, vous en voudrez un supplémentaire<< std::flush
pour vous assurer que la sortie est affichée.Lecture des
cin
vidagescout
pour ne pas avoir besoin d'un vidage explicite pour ce faire:la source
sleep()
(POSIX) avecSleep()
(Windows)cout
avec un espace de noms (c'est-à-direstd::cout
) mais ne l' avez pas fait pour leendl
, qui devrait également exiger cette qualification.Effacez le tampon en sortant tout.
la source