std::cout, std::wcout
| Definiert in Header <iostream> |
||
| extern std::ostream cout; |
(1) | |
| extern std::wostream wcout; |
(2) | |
Die globalen Objekte std::cout und std::wcout steuern die Ausgabe in einen Stream-Puffer von implementierungsabhängigem Typ (abgeleitet von std::streambuf), der mit dem Standard-C-Ausgabestrom stdout verbunden ist.
Es wird garantiert, dass diese Objekte während oder vor der ersten Konstruktion eines Objekts vom Typ std::ios_base::Init initialisiert werden und für die Verwendung in den Konstruktoren und Destruktoren von statischen Objekten mit geordneter Initialisierung verfügbar sind (solange <iostream> vor der Definition des Objekts inkludiert wird).
Sofern nicht std::ios_base::sync_with_stdio(false) aufgerufen wurde, ist es sicher, gleichzeitig von mehreren Threads auf diese Objekte für formatierte und unformatierte Ausgaben zuzugreifen.
Gemäß der Spezifikation von std::cin gibt std::cin.tie() &std::cout zurück. Das bedeutet, dass jede Eingabeoperation auf std::cin std::cout.flush() (über den Konstruktor von std::basic_istream::sentry) ausführt. Ähnlich gibt std::wcin.tie() &std::wcout zurück.
Gemäß der Spezifikation von std::cerr gibt std::cerr.tie() &std::cout zurück. Das bedeutet, dass jede Ausgabeoperation auf std::cerr std::cout.flush() (über den Konstruktor von std::basic_ostream::sentry) ausführt. Ähnlich gibt std::wcerr.tie() &std::wcout zurück. (seit C++11)
[bearbeiten] Hinweise
Das 'c' im Namen bezieht sich auf "character" (Zeichen) (stroustrup.com FAQ); cout bedeutet "character output" (Zeichenausgabe) und wcout bedeutet "wide character output" (Breitzeichenausgabe).
Da die dynamische Initialisierung von templatisierten Variablen ungeordnet ist, ist nicht garantiert, dass std::cout vor Beginn der Initialisierung solcher Variablen in einem verwendbaren Zustand initialisiert ist, es sei denn, ein Objekt vom Typ std::ios_base::Init wurde konstruiert.
[bearbeiten] Beispiel
#include <iostream> struct Foo { int n; Foo() { std::cout << "static constructor\n"; } ~Foo() { std::cout << "static destructor\n"; } }; Foo f; // static object int main() { std::cout << "main function\n"; }
Ausgabe
static constructor main function static destructor
[bearbeiten] Siehe auch
| initialisiert Standard-Stream-Objekte (public member class of std::ios_base) | |
| schreibt in den Standard-C-Fehlerstrom stderr, unbuffered (globales Objekt) | |
| schreibt in den Standard-C-Fehlerstrom stderr (globales Objekt) | |
| Ausdruck vom Typ FILE*, der dem Eingabestrom zugeordnet ist Ausdruck vom Typ FILE*, der dem Ausgabestrom zugeordnet ist Ausdruck vom Typ FILE*, der dem Fehlerstrom zugeordnet ist (Makrokonstante) |