std::ios_base::sync_with_stdio
| static bool sync_with_stdio( bool sync = true ); |
||
Legt fest, ob die Standard-C++-Streams nach jeder Ein-/Ausgabeoperation mit den Standard-C-Streams synchronisiert werden.
Die Standard-C++-Streams sind die folgenden: std::cin, std::cout, std::cerr, std::clog, std::wcin, std::wcout, std::wcerr und std::wclog.
Die Standard-C-Streams sind die folgenden: stdin, stdout und stderr.
Für einen Standard-Stream str, der mit dem C-Stream f synchronisiert ist, haben die folgenden Funktionspaare identische Auswirkungen:
Das bedeutet in der Praxis, dass die synchronisierten C++-Streams ungepuffert sind und jede Ein-/Ausgabeoperation auf einem C++-Stream sofort auf den Puffer des entsprechenden C-Streams angewendet wird. Dadurch ist es möglich, C++- und C-Ein-/Ausgaben frei zu mischen.
Zusätzlich wird garantiert, dass synchronisierte C++-Streams threadsicher sind (einzelne ausgegebene Zeichen von mehreren Threads können sich überlappen, aber es treten keine Datenrennen auf).
Wenn die Synchronisierung deaktiviert wird, dürfen die Standard-C++-Streams ihre Ein-/Ausgaben unabhängig puffern, was in manchen Fällen erheblich schneller sein kann.
Standardmäßig sind alle acht Standard-C++-Streams mit ihren jeweiligen C-Streams synchronisiert.
Wenn diese Funktion nach einer Ein-/Ausgabeoperation auf dem Standard-Stream aufgerufen wird, ist das Verhalten implementierungsabhängig: Die Implementierungen reichen von keiner Auswirkung bis zur Zerstörung des Lesepuffers.
Inhalt |
[bearbeiten] Parameter
| sync | - | die neue Synchronisierungseinstellung |
[bearbeiten] Rückgabewert
Synchronisierungsstatus vor dem Aufruf der Funktion.
[bearbeiten] Beispiel
#include <cstdio> #include <iostream> int main() { std::ios::sync_with_stdio(false); std::cout << "a\n"; std::printf("b\n"); std::cout << "c\n"; }
Mögliche Ausgabe
b a c
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 49 | C++98 | es war nicht spezifiziert (1), welcher Status tatsächlich zurückgegeben wird und (2) was "synchronisiert" zwischen Standard-C- und C++-Streams bedeutet |
beides wurde spezifiziert |
[bearbeiten] Siehe auch
| schreibt in den Standard-C-Ausgabestrom stdout (globales Objekt) | |
| schreibt in den Standard-C-Fehlerstrom stderr, unbuffered (globales Objekt) | |
| schreibt in den Standard-C-Fehlerstrom stderr (globales Objekt) |