Namespaces
Variants

operator<<(std::basic_ostream)

Von de.cppreference.net
 
 
 
 
Definiert in Header <ostream>
basic_ostream und Zeichen
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 );
(1)
basic_ostream und Zeichenarray
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 );
(2)
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
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 ) = delete;

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 ) = delete;

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 ) = delete;
(4) (seit C++20)

Fügt ein Zeichen oder eine Zeichenkette ein.

1) Verhält sich wie eine FormattedOutputFunction. Nach der Konstruktion und Prüfung des sentry-Objekts wird das Zeichen ch eingefügt. Wenn ch den Typ char hat und der Zeichencontainer-Typ 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() zum Ausgabezeichen hinzugefügt, um die Ausgabezeichensequenz zu bilden.
  • Wenn (out.flags() & std::ios_base::adjustfield) == std::ios_base::left, werden die Füllzeichen nach dem Ausgabezeichen platziert, andernfalls davor.
Nach der Einfügung wird os.width(0) aufgerufen, um die Auswirkungen von std::setw zu annullieren, falls vorhanden.
2) Verhält sich wie eine FormattedOutputFunction. Nach der Konstruktion und Prüfung des Sentry-Objekts werden aufeinanderfolgende Zeichen aus dem Zeichenarray eingefügt, dessen erstes Element von s referenziert wird.
  • Für die erste und dritte Überladung (wo CharT mit dem Typ von ch übereinstimmt), werden genau traits::length(s) Zeichen eingefügt.
  • Für die zweite Überladung werden genau std::char_traits<char>::length(s) Zeichen eingefügt.
  • Für die letzten beiden Überladungen werden genau traits::length(reinterpret_cast<const char*>(s)) eingefügt.
Vor der Einfügung werden zunächst alle Zeichen mit os.widen() verbreitert, dann wird die Auffüllung wie folgt bestimmt:
  • Wenn die Anzahl der einzufügenden Zeichen kleiner als os.width() ist, werden genügend Kopien von os.fill() zur Zeichensequenz hinzugefügt, um ihre Länge os.width() gleich 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 der Einfügung wird os.width(0) aufgerufen, um die Auswirkungen von std::setw zu annullieren, falls vorhanden.
Wenn s ein Nullzeiger ist, ist das Verhalten undefiniert.
3) Ruft den entsprechenden Einfügeoperator auf, gegeben eine Rvalue-Referenz auf ein Ausgabestromobjekt (äquivalent zu 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 usw. (oder eine nullterminierte Sequenz davon) akzeptieren, sind gelöscht: std::cout << u'X' ist nicht erlaubt. Zuvor würden diese einen Ganzzahl- oder Zeigerwert ausgeben.

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> )