Z wersji roboczej standardowego dokumentu C ++ 17:
30.4.3 Obiekty o wąskim strumieniu [narrow.stream.objects]
istream cin;
1 Obiekt cinsteruje wejściem z bufora strumieniowego związanego z obiektem stdin, zadeklarowanym w <cstdio>(30.11.1).
2 Po cinzainicjowaniu obiektu cin.tie()zwraca &cout. basic_ios<char>::initPoza tym jego stan jest taki sam, jak wymagany w (30.5.5.2).
ostream cout;
3 Obiekt coutsteruje wyjściem do bufora strumieniowego związanego z obiektem stdout, zadeklarowanym w <cstdio>(30.11.1).
ostream cerr;
4 Obiekt cerrsteruje wyjściem do bufora strumieniowego związanego z obiektem stderr, zadeklarowanym w<cstdio> (30.11.1).
5 Po cerrzainicjowaniu obiektu cerr.flags() & unitbufjest niezerowa i cerr.tie()zwraca &cout. basic_ios<char>::initPoza tym jego stan jest taki sam, jak wymagany w (30.5.5.2).
ostream clog;
6 Obiekt clogsteruje wyjściem do bufora strumieniowego związanego z obiektem stderr, zadeklarowanym w <cstdio>(30.11.1).
Dyskusja...
coutpisze do stdout; cerri clogdostderr
Standardowe wyjście (stdout ) ma na celu odbieranie z programu bezbłędnych, niediagnostycznych danych wyjściowych, takich jak dane wyjściowe z pomyślnego przetwarzania, które mogą być wyświetlane użytkownikowi końcowemu lub przesyłane strumieniowo do dalszego etapu przetwarzania.
Standard Error ( stderr) jest przeznaczony do diagnostyki danych wyjściowych, takich jak ostrzeżenia i komunikaty o błędach, które wskazują, że program nie wygenerował lub mógł nie wygenerować danych wyjściowych, których użytkownik mógłby się spodziewać. Te dane wejściowe mogą być wyświetlane użytkownikowi końcowemu, nawet jeśli dane wyjściowe są przesyłane potokiem do dalszego etapu przetwarzania.
cini cerrsą przywiązanicout
Obaj opróżniają się coutprzed samodzielną obsługą operacji we / wy. Zapewnia to, że podpowiedzi wysyłane do coutsą widoczne przed blokami programu, z których mają odczytać dane wejściowe cin, oraz że wcześniejsze wyjście do coutjest opróżniane przed zapisaniem błędu cerr, co utrzymuje komunikaty w chronologicznej kolejności ich generowania, gdy oba są kierowane do tego samego terminala / pliku / itp..
Kontrastuje to z clog- jeśli tam napiszesz, nie będzie buforowany i nie będzie z niczym powiązany, więc przed opróżnieniem będzie buforował przyzwoite ilości logowania. Zapewnia to największą przepustowość komunikatów, ale oznacza, że komunikaty mogą nie być szybko widoczne dla potencjalnego konsumenta czytającego terminal lub śledzącego dziennik.
stdout,stdin(dlacin) istderrużywa go domyślnie. Uważam, żeclogjest to tylkocerrzmiana buforująca.