Namespaces
Variants

operator<< (std::basic_ostream)

From cppreference.net
**Anmerkung:** Der gesamte Code innerhalb der ` ` Tags ist C++-Code und wurde gemäß den Anweisungen nicht übersetzt. Die HTML-Struktur, Attribute und Formatierung bleiben vollständig erhalten. (Anmerkung: Der bereitgestellte HTML-Code enthält keinen übersetzbaren Text, da alle Tags und Attribute gemäß den Anweisungen unverändert bleiben sollen und keine Textinhalte zwischen den Tags vorhanden sind.)
Definiert in Header <ostream>
basic_ostream und Zeichen
(1)
template < class CharT, class Traits >

basic_ostream < CharT, Traits > &

operator << ( basic_ostream < CharT, Traits > & os, CharT ch ) ;
template < class CharT, class Traits >

basic_ostream < CharT, Traits > &

operator << ( basic_ostream < CharT, Traits > & os, char ch ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, char ch ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, signed char ch ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, unsigned char ch ) ;
basic_ostream und Zeichen-Array
(2)
template < class CharT, class Traits >

basic_ostream < CharT, Traits > &

operator << ( basic_ostream < CharT, Traits > & os, const CharT * s ) ;
template < class CharT, class Traits >

basic_ostream < CharT, Traits > &

operator << ( basic_ostream < CharT, Traits > & os, const char * s ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const char * s ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const signed char * s ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const unsigned char * s ) ;
basic_ostream Rvalue
template < class Ostream, class T >
Ostream && operator << ( Ostream && os, const T & value ) ;
(3) (seit C++11)
gelöschte Überladungen für basic_ostream und UTF-Zeichen/Array
(4) (seit C++20)
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, wchar_t ch ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, char8_t ch ) = gelöscht ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, char16_t ch ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, char32_t ch ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

Operator << ( basic_ostream < wchar_t , Traits > & os, char8_t ch ) = gelöscht ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, char16_t ch ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, char32_t ch ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const wchar_t * s ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const char8_t * s ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const char16_t * s ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const char32_t * s ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, const char8_t * s ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, const char16_t * s ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

Operator << ( basic_ostream < wchar_t , Traits > & os, const char32_t * s ) = gelöscht ;

Fügt ein Zeichen oder eine Zeichenkette ein.

1) Verhält sich wie eine FormattedOutputFunction . Nach dem Konstruieren und Prüfen des sentry -Objekts wird das Zeichen ch eingefügt. Falls ch den Typ char hat und der Zeichencontainertyp von os nicht char ist, wird stattdessen os. widen ( ch ) eingefügt.
Die Auffüllung wird wie folgt bestimmt:
  • Wenn os. width ( ) > 1 , dann werden os. width ( ) - 1 Kopien von os. fill ( ) zur Ausgabecharakterfolge hinzugefügt.
  • Wenn ( out. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left , werden die Füllzeichen nach dem Ausgabecharakter platziert, andernfalls davor.
Nach dem Einfügen wird os. width ( 0 ) aufgerufen, um die Effekte von std::setw gegebenenfalls aufzuheben.
2) Verhält sich wie eine FormattedOutputFunction . Nach dem Konstruieren und Prüfen des Sentry-Objekts werden aufeinanderfolgende Zeichen aus dem Zeichenarray eingefügt, dessen erstes Element durch s gezeigt wird.
  • Für die erste und dritte Überladung (wobei CharT dem Typ von ch entspricht), werden exakt traits :: length ( s ) Zeichen eingefügt.
  • Für die zweite Überladung werden exakt std:: char_traits < char > :: length ( s ) Zeichen eingefügt.
  • Für die letzten beiden Überladungen werden exakt traits :: length ( reinterpret_cast < const char * > ( s ) ) Zeichen eingefügt.
Vor dem Einfügen werden zunächst alle Zeichen mittels os. widen ( ) verbreitert, dann wird die Auffüllung wie folgt bestimmt:
  • Wenn die Anzahl der einzufügenden Zeichen kleiner ist als os. width ( ) , werden genügend Kopien von os. fill ( ) zur Zeichensequenz hinzugefügt, um deren Länge gleich os. width ( ) zu machen.
  • Wenn ( out. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left , werden die Füllzeichen am Ende der Ausgabesequenz hinzugefügt, andernfalls werden sie vor der Ausgabesequenz hinzugefügt.
Nach dem Einfügen wird os. width ( 0 ) aufgerufen, um die Effekte von std::setw , falls vorhanden, aufzuheben.
Wenn s ein Nullzeiger ist, ist das Verhalten undefiniert.
3) Ruft den entsprechenden Einfügeoperator auf, gegeben einen Rvalue-Referenz auf ein Ausgabestream-Objekt (entspricht os << value ). Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn der Ausdruck os << value wohlgeformt ist und Ostream ein Klassentyp ist, der öffentlich und eindeutig von std::ios_base abgeleitet ist.
4) Überladungen, die char16_t , char32_t etc. (oder nullterminierte Sequenzen davon) akzeptieren, sind gelöscht: std:: cout << u 'X' ist nicht erlaubt. Zuvor hätten diese einen Integer- oder Pointerwert ausgegeben.

Inhaltsverzeichnis

Parameter

os - Ausgabestream, in den Daten eingefügt werden
ch - Referenz auf ein einzufügendes Zeichen
s - Zeiger auf eine einzufügende Zeichenkette

Rückgabewert

1,2) os
3) std :: move ( os )

Hinweise

Vor LWG Issue 1203 konnte Code wie ( std:: ostringstream ( ) << 1.2 ) . str ( ) nicht kompiliert werden.

Beispiel

#include <fstream>
#include <iostream>
void foo()
{
    // Fehler: operator<< (basic_ostream<char, _Traits>&, char8_t) ist gelöscht
//  std::cout << u8'z' << '\n';
}
std::ostream& operator<<(std::ostream& os, char8_t const& ch)
{
    return os << static_cast<char>(ch);
}
int main()
{
    std::cout << "Hello, world" // verwendet `const char*` Überladung
              << '\n';          // verwendet `char` Überladung
    std::ofstream{"test.txt"} << 1.2; // verwendet Rvalue-Überladung
    std::cout << u8'!' << '\n'; // verwendet programmdefinierten operator<<(os, char8_t const&)
}

Ausgabe:

Hello, world
!

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 167 C++98 die Anzahl der eingefügten Zeichen für alle
Überladungen in (2) war traits :: length ( s )
aktualisierte die Zahlen für die Überladungen
bei denen CharT nicht mit dem Typ von ch übereinstimmt
LWG 1203 C++11 Überladung für Rvalue-Stream gab
Lvalue-Referenz auf die Basisklasse zurück
gibt Rvalue-Referenz
auf die abgeleitete Klasse zurück
LWG 2011 C++98 Auffüllen wurde bestimmt durch std::num_put::do_put() bestimmt durch den Operator selbst
LWG 2534 C++11 Überladung für Rvalue-Stream war nicht eingeschränkt eingeschränkt

Siehe auch

formatiert Daten ein
(öffentliche Elementfunktion)
gibt formatierte Darstellung der Argumente aus
(Funktions-Template)
erweitert Zeichen
(öffentliche Elementfunktion von std::basic_ios<CharT,Traits> )