Namespaces
Variants

std::basic_ostream<CharT,Traits>:: operator<<

From cppreference.net
(Anmerkung: Der bereitgestellte HTML-Code enthält keinen übersetzbaren Text, da alle Tags leer sind. Die Struktur und Formatierung bleiben unverändert.)
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 Konstruieren und Prüfen des Sentry-Objekts wird ein Wert durch Aufruf von std::num_put::put() eingefügt. Wenn während der Ausgabe ein Dateiende-Zustand auftrat ( put ( ) . failed ( ) == true ), wird badbit gesetzt.
9) Entspricht return operator << ( const_cast < const void * > ( p ) ) ; .
10) Entspricht return * this << s ; , wobei s ein implementierungsdefinierter nullterminierter Zeichenketten-Typ ist.
11) Fügt einen Wert aus short value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction . Nach dem Konstruieren und Prüfen des Sentry-Objekts wird ein long -Wert lval wie in (2) eingefügt, wobei lval definiert ist als:
12) Fügt einen Wert aus int value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction . Nach dem Konstruieren und Prüfen des Sentry-Objekts wird ein long -Wert lval wie in (2) eingefügt, wobei lval ist
13,14) Fügt einen Wert aus unsigned short oder unsigned int value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction . Nach dem Konstruieren und Prüfen des Sentry-Objekts, fügt sie static_cast < unsigned long > ( value ) wie in (3) ein.
15) Fügt einen Wert aus float value ein.
Diese Funktion verhält sich wie eine FormattedOutputFunction . Nach dem Konstruieren und Prüfen des Sentry-Objekts, fügt sie static_cast < double > ( value ) wie in (6) ein.
16) Fügt einen Wert aus value ein. Die Bibliothek bietet Überladungen für alle cv-unqualifizierten extended floating-point types als Typ des Parameters value an.
Diese Funktion verhält sich wie eine FormattedOutputFunction . Nach dem Konstruieren und Prü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 ein Aufruf dieser Überladung bedingt unterstützt mit implementierungsdefinierter Semantik.
17) Diese Funktion verhält sich wie eine UnformattedOutputFunction . Nach dem Konstruieren und Prüfen des Sentry-Objekts wird überprüft, ob sb ein Nullzeiger ist. Falls ja, wird setstate ( badbit ) ausgeführt und beendet. Andernfalls werden Zeichen aus der von sb gesteuerten Eingabesequenz extrahiert und in * this eingefügt, bis eine der folgenden Bedingungen erfüllt ist:
  • Ende-der-Datei in der Eingabesequenz auftritt;
  • das Einfügen in die Ausgabesequenz fehlschlägt (wobei das einzufügende Zeichen nicht extrahiert wird);
  • eine Exception auftritt (wobei die Exception abgefangen wird).
Falls keine Zeichen eingefügt wurden, wird setstate ( failbit ) ausgeführt. Wenn beim Extrahieren eine Exception ausgelöst wurde, wird failbit gesetzt und, falls failbit in exceptions() gesetzt ist, die Exception erneut ausgelöst.
18-20) Ruft func ( * this ) auf. Diese Überladungen werden verwendet, um Ausgabe-I/O-Manipulatoren wie std::endl zu implementieren.

Inhaltsverzeichnis

Parameter

value - einzufügender Integer-, Gleitkomma-, Boolean- oder Zeigerwert
func - aufzurufende Funktion
sb - Zeiger auf den Streampuffer, von dem die Daten gelesen werden

Rückgabewert

1-19) * this
20) func ( * this )

Hinweise

Es gibt keine Überladungen für Zeiger auf nicht-statische Member , Zeiger auf volatile-Objekte, (bis C++23) oder Funktionszeiger (außer denen mit Signaturen, die von den ( 18-20 ) Überladungen akzeptiert werden).

  • Der Versuch, solche Objekte auszugeben, ruft eine implizite Konvertierung zu bool auf, und für jeden nicht-null Zeigerwert wird der Wert 1 ausgegeben (sofern nicht boolalpha gesetzt wurde, in welchem Fall true ausgegeben wird).

Zeichen- und Zeichenkettenargumente (z.B. vom Typ char oder const char * ) werden durch die Nicht-Member-Überladungen von operator << behandelt.

  • Der Versuch, ein Zeichen mit der Memberfunktionsaufrufsyntax (z.B., std:: cout . operator << ( 'c' ) ; ) auszugeben, wird eine der Überladungen in ( 2-5 ) oder ( 11-14 ) aufrufen und den numerischen Wert ausgeben.
  • Der Versuch, eine Zeichenkette mit der Memberfunktionsaufrufsyntax auszugeben, wird Überladung (8) aufrufen und stattdessen den Zeigerwert ausgeben.

Overload (10) wurde durch die Resolution von LWG-Issue 2221 hinzugefügt, wird jedoch in keiner Standardbibliothek-Implementierung unter C++11/14-Modi implementiert.

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 Überladung (12)
        << ' '            // Nicht-Member-Überladung
        << std::boolalpha // Funktionsüberladung (18)
        << b              // bool Überladung (1)
        << " "            // Nicht-Member-Überladung
        << std::fixed     // Funktionsüberladung (18) erneut
        << f              // double Überladung (6)
        << input.rdbuf()  // streambuf Überladung
        << fun            // bool Überladung (1): Es gibt keine Überladung für int(*)()
        << std::endl;     // Funktionsüberladung (18) erneut
    int x = 0;
    int* p1 = &x;
    volatile int* p2 = &x;
    std::cout
        << "p1: " << p1 << '\n'  // `const void*` Überladung, gibt Adresse aus
        << "p2: " << p2 << '\n'; // Vor C++23 (P1147): bool Überladung :), weil
            // operator<<(const void*) keine Übereinstimmung ist, da es den `volatile`
            // Qualifizierer verwirft. Um dies zu beheben, fügt C++23 `const volatile void*` Überladung (9) hinzu,
            // die wie erwartet die Adresse ausgibt.
}

Mögliche Ausgabe:

42 true 3.140000 "Some text." true
p1: 0x7ffcea766600
p2: 0x7ffcea766600

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 117 C++98 Überladungen (1-8,11-15) delegierten die Ausgabe an
num_put::put , aber es gibt keine Überladungen für short ,
unsigned short , int , unsigned int , und float
sie werden konvertiert
bevor sie an
num_put::put übergeben werden
LWG 567 C++98 Überladung (17) verhielt sich wie eine FormattedOutputFunction
aufgrund der Lösung von LWG Issue 60
sie verhält sich wie eine
UnformattedOutputFunction

Siehe auch

Fügt Zeichendaten ein oder fügt in Rvalue-Stream ein
(Funktionsschablone)
führt Stream-Eingabe und -Ausgabe für Zeichenketten durch
(Funktionsschablone)
(C++17)
führt Stream-Ausgabe für String-Views durch
(Funktionsschablone)
führt Stream-Eingabe und -Ausgabe für Bitsets durch
(Funktionsschablone)
serialisiert und deserialisiert eine komplexe Zahl
(Funktionsschablone)
führt Stream-Eingabe und -Ausgabe für Pseudozufallszahlengeneratoren durch
(Funktionsschablone)
führt Stream-Eingabe und -Ausgabe für Pseudozufallszahlenverteilungen durch
(Funktionsschablone)
fügt ein Zeichen ein
(öffentliche Elementfunktion)
fügt Zeichenblöcke ein
(öffentliche Elementfunktion)
(C++17)
konvertiert einen Integer- oder Fließkommawert in eine Zeichenfolge
(Funktion)