Contrairement à la réponse d'anon (28 avril 2009), ce comportement n'a rien à voir avec le système d'exploitation ou le «logiciel de console».
C flux de <iostream>
++ sont conçus pour être interopérable avec <stdio.h>
flux de carbone. L'objectif est de permettre le mélange des utilisations de std::cout
avec les utilisations de printf
/puts
. Pour ce faire, streambuf
de std::cout
est implémenté sur le flux stdout
de C. Il s'agit en fait de stdout
de C qui est mis en mémoire tampon lorsque la sortie standard est connectée à un périphérique de terminal. Vous pouvez appeler std::ios_base::sync_with_stdio(false)
(avant que votre programme n'utilise l'un des flux d'E/S standard du C++) pour indiquer à la bibliothèque de flux C++ de communiquer directement avec les descripteurs de fichiers sous-jacents plutôt que sur la bibliothèque de flux C's. Ceci évite entièrement le flux stdout
de C et accélère les flux d'E/S de C++ au prix que les deux bibliothèques ne se mélangent plus bien.
Une alternative consiste à définir inconditionnellement stdout
pour entièrement mis en mémoire tampon en appelant std::setvbuf(stdout, nullptr, _IOFBF, BUFSIZ)
. Ensuite, même si std::cout
écrit toujours à travers stdout
, vous n'aurez pas stdout
flush après chaque nouvelle ligne.
Peut-être que cela peut être utile, je doute que cela vous aide beaucoup avec votre problème si. http://nibuthomas.com/2009/02/12/writing-endl-like-functions-for-output-streams/ – Skurmedel
Il semble qu'il y ait un débat quant à la légitimité de l'affirmation selon laquelle C++ incorpore la ligne C90 tamponnée vs distinction entièrement bufferisée pour std :: cout. Peu importe, existe-t-il un moyen de changer entre les modes de mise en mémoire tampon avec MSVC? – pauldoo
Peut-être que vous pourriez écrire un programme de test et voir si la revendication est vraie? – Skurmedel