std::basic_ostream<CharT,Traits>::operator<<
Von cppreference.com
< cpp | io | basic ostream
| basic_ostream& operator<<( bool value ); |
(1) | |
basic_ostream& operator<<( long value ); |
(2) | |
| basic_ostream& operator<<( unsigned long value ); |
(3) | |
| basic_ostream& operator<<( long long value ); |
(4) | (seit C++11) |
| basic_ostream& operator<<( unsigned long long value ); |
(5) | (seit C++11) |
| basic_ostream& operator<<( double value ); |
(6) | |
| basic_ostream& operator<<( long double value ); |
(7) | |
basic_ostream& operator<<( const void* value ); |
(8) | |
| basic_ostream& operator<<( const volatile void* value ); |
(9) | (seit C++23) |
| basic_ostream& operator<<( std::nullptr_t ); |
(10) | (seit C++17) |
basic_ostream& operator<<( short value ); |
(11) | |
| basic_ostream& operator<<( int value ); |
(12) | |
| basic_ostream& operator<<( unsigned short value ); |
(13) | |
| basic_ostream& operator<<( unsigned int value ); |
(14) | |
| basic_ostream& operator<<( float value ); |
(15) | |
| basic_ostream& operator<<( /* extended-floating-point-type */ value ); |
(16) | (seit C++23) |
| basic_ostream& operator<<( std::basic_streambuf<CharT, Traits>* sb ); |
(17) | |
basic_ostream& operator<<( std::ios_base& (*func)(std::ios_base&) ); |
(18) | |
| basic_ostream& operator<<( std::basic_ios<CharT, Traits>& (*func)(std::basic_ios<CharT, Traits>&) ); |
(19) | |
| basic_ostream& operator<<( std::basic_ostream<CharT, Traits>& (*func) |
(20) | |
Fügt Daten in den Stream ein.
1-8) Fügt value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction. Nach dem Erstellen und Überprüfen des Sentry-Objekts wird ein Wert durch Aufrufen von std::num_put::put() eingefügt. Wenn während der Ausgabe die End-of-File-Bedingung angetroffen wurde (put().failed() == true), wird
badbit gesetzt.9) Entspricht return operator<<(const_cast<const void*>(p));.
10) Entspricht return *this << s;, wobei s eine implementierungsabhängige nullterminierte Zeichenkettenart ist.
11) Fügt einen Wert von short value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction. Nach dem Erstellen und Überprüfen des Sentry-Objekts wird ein long-Wert lval wie in (2) eingefügt, wobei lval ist
- static_cast<long>(static_cast<unsigned short>(value)), wenn flags() & std::ios_base::basefield std::ios_base::oct oder std::ios_base::hex ist, oder
- static_cast<long>(value) andernfalls.
12) Fügt einen Wert von int value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction. Nach dem Erstellen und Überprüfen des Sentry-Objekts wird ein long-Wert lval wie in (2) eingefügt, wobei lval ist
- static_cast<long>(static_cast<unsigned int>(value)), wenn flags() & std::ios_base::basefield std::ios_base::oct oder std::ios_base::hex ist, oder
- static_cast<long>(value) andernfalls.
13,14) Fügt einen Wert von unsigned short oder unsigned int value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction. Nach dem Erstellen und Überprüfen des Sentry-Objekts wird static_cast<unsigned long>(value) wie in (3) eingefügt.
15) Fügt einen Wert von float value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction. Nach dem Erstellen und Überprüfen des Sentry-Objekts wird static_cast<double>(value) wie in (6) eingefügt.
16) Fügt einen Wert von value ein. Die Bibliothek stellt Überladungen für alle cv-unqualifizierten erweiterten Gleitkommatypen als Typ des Parameterwerts bereit.
Diese Funktion verhält sich wie eine FormattedOutputFunction. Nach dem Erstellen und Überprüfen des Sentry-Objekts wird der Gleitkomma-Konvertierungsrang von /* extended-floating-point-type */ überprüft
- Wenn der Rang kleiner oder gleich dem von double ist, wird static_cast<double>(value) wie in (6) eingefügt.
- Andernfalls, wenn der Rang kleiner oder gleich dem von long double ist, wird static_cast<long double>(value) wie in (7) eingefügt.
- Andernfalls ist die Invocatio dieser Überladung bedingt unterstützt mit implementierungsabhängiger Semantik.
17) Diese Funktion verhält sich wie eine UnformattedOutputFunction. Nach dem Erstellen und Überprüfen des Sentry-Objekts wird überprüft, ob sb ein Nullzeiger ist. Wenn ja, wird setstate(badbit) ausgeführt und die Funktion beendet. Andernfalls werden Zeichen aus der Eingabesequenz, die von sb gesteuert wird, extrahiert und in *this eingefügt, bis eine der folgenden Bedingungen erfüllt ist:
- Das Ende der Eingabesequenz wird erreicht;
- Das Einfügen in die Ausgabesequenz schlägt fehl (in diesem Fall wird das einzufügende Zeichen nicht extrahiert);
- Eine Ausnahme tritt auf (in diesem Fall wird die Ausnahme abgefangen).
failbit gesetzt, und wenn failbit in exceptions() gesetzt ist, wird die Ausnahme erneut ausgelöst.18-20) Ruft func(*this) auf. Diese Überladungen werden verwendet, um Ausgabe-I/O-Manipulatoren wie std::endl zu implementieren.
Inhalt |
[edit] Parameter
| value | - | Ganzzahliger, Gleitkomma-, boolescher oder Zeigerwert, der eingefügt werden soll |
| func | - | Die aufzurufende Funktion |
| sb | - | Zeiger auf den Stream-Puffer, aus dem die Daten gelesen werden sollen |
[edit] Rückgabewert
1-19) *this
20) func(*this)
[edit] Anmerkungen
Es gibt keine Überladungen für Zeiger auf nicht-statische Member, Zeiger auf volatile,(bis C++23) oder Funktionszeiger (außer denen mit Signaturen, die von den Überladungen (18-20) akzeptiert werden).
- Der Versuch, solche Objekte auszugeben, führt zu einer impliziten Konvertierung in bool, und für jeden nicht-Null-Zeigerwert wird der Wert 1 gedruckt (es sei denn,
boolalphawurde gesetzt, in diesem Fall wird true gedruckt).
Zeichen- und Zeichenkettenargumente (z. B. vom Typ char oder const char*) werden von den nicht-Member-Überladungen von operator<< behandelt.
- Der Versuch, ein Zeichen mithilfe der Memberfunktionsaufrufsyntax auszugeben (z. B. std::cout.operator<<('c');), ruft eine der Überladungen in (2-5) oder (11-14) auf und gibt den numerischen Wert aus.
- Der Versuch, eine Zeichenkette mithilfe der Memberfunktionsaufrufsyntax auszugeben, ruft die Überladung (8) auf und gibt stattdessen den Zeigerwert aus.
Überladung (10) wurde durch die Auflösung von LWG-Problem 2221 hinzugefügt, wird aber in C++11/14-Modi in keiner Standardbibliotheksimplementierung implementiert.
[edit] Beispiel
Führen Sie diesen Code aus
#include <iomanip> #include <iostream> #include <sstream> int fun() { return 42; } int main() { std::istringstream input(" \"Some text.\" "); double f = 3.14; bool b = true; std::cout << fun() // int overload (12) << ' ' // non-member overload << std::boolalpha // function overload (18) << b // bool overload (1) << " " // non-member overload << std::fixed // function overload (18) again << f // double overload (6) << input.rdbuf() // streambuf overload << fun // bool overload (1): there's no overload for int(*)() << std::endl; // function overload (18) again int x = 0; int* p1 = &x; volatile int* p2 = &x; std::cout << "p1: " << p1 << '\n' // `const void*` overload, prints address << "p2: " << p2 << '\n'; // before C++23 (P1147): bool overload :), because // operator<<(const void*) is not a match, as it discards the `volatile` // qualifier. To fix this, C++23 adds `const volatile void*` overload (9), // that prints the address as expected. }
Mögliche Ausgabe
42 true 3.140000 "Some text." true p1: 0x7ffcea766600 p2: 0x7ffcea766600
[edit] 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 117 | C++98 | Die Überladungen (1-8,11-15) delegieren die Einfügung an num_put::put, aber es gibt keine Überladungen für short, unsigned short, int, unsigned int und float |
sie werden konvertiert bevor sie übergeben werden an num_put::put |
| LWG 567 | C++98 | Die Überladung (17) verhielt sich aufgrund der Auflösung von LWG-Problem 60 als FormattedOutputFunction verhielt sich als |
als UnformattedOutputFunction |
[edit] Siehe auch
| fügt Zeichendaten ein oder fügt in einen rvalue-Stream ein (function template) | |
| führt Stream-Ein- und -Ausgabe auf Strings durch (function template) | |
| (C++17) |
führt die Stromausgabe auf Zeichenansichten durch (Funktionsschablone) |
| führt Stream-Ein- und -Ausgabe von Bitsets durch (function template) | |
| serialisiert und deserialisiert eine komplexe Zahl (function template) | |
| (C++11) |
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlengeneratoren durch (function template) |
| (C++11) |
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlendistributionen durch (function template) |
| fügt ein Zeichen ein (public member function) | |
| fügt Zeichenblöcke ein (public member function) | |
| (C++17) |
konvertiert einen Ganzzahl- oder Gleitkommawert in eine Zeichensequenz (Funktion) |