Namensräume
Varianten
Aktionen

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)

        (std::basic_ostream<CharT, Traits>&) );
(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
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
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).
Wenn keine Zeichen eingefügt wurden, wird setstate(failbit) ausgeführt. Wenn während der Extraktion eine Ausnahme ausgelöst wurde, wird 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, boolalpha wurde 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

#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) [bearbeiten]
führt Stream-Ein- und -Ausgabe auf Strings durch
(function template) [edit]
führt die Stromausgabe auf Zeichenansichten durch
(Funktionsschablone) [edit]
führt Stream-Ein- und -Ausgabe von Bitsets durch
(function template) [edit]
serialisiert und deserialisiert eine komplexe Zahl
(function template) [edit]
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlengeneratoren durch
(function template) [edit]
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlendistributionen durch
(function template) [edit]
fügt ein Zeichen ein
(public member function) [bearbeiten]
fügt Zeichenblöcke ein
(public member function) [bearbeiten]
(C++17)
konvertiert einen Ganzzahl- oder Gleitkommawert in eine Zeichensequenz
(Funktion) [bearbeiten]