Namensräume
Varianten
Aktionen

operator<<(std::basic_ostream)

Von cppreference.com
< cpp‎ | io‎ | basic ostream
 
 
 
 
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 Zeichenarray
(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/Arrays
(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 ) = 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;

Fügt ein Zeichen oder eine Zeichenkette ein.

1) Verhält sich wie eine FormattedOutputFunction. Nach der Konstruktion und Überprü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 ist, werden os.width() - 1 Kopien von os.fill() zum Ausgabebuchstaben hinzugefügt, um die Ausgabebuchstabenfolge zu bilden.
  • Wenn (out.flags() & std::ios_base::adjustfield) == std::ios_base::left ist, werden die Füllzeichen nach dem Ausgabebuchstaben platziert, andernfalls davor.
Nach dem Einfügen wird os.width(0) aufgerufen, um die Effekte von std::setw abzubrechen, falls vorhanden.
2) Verhält sich wie eine FormattedOutputFunction. Nach der Konstruktion und Überprüfung des Sentry-Objekts werden sukzessive Zeichen aus dem Zeichenarray eingefügt, auf dessen erstes Element s zeigt.
  • Für die erste und dritte Überladung (bei der CharT dem Typ von ch entspricht) 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)) Zeichen eingefügt.
Vor dem Einfügen werden zunächst alle Zeichen mit os.widen() erweitert, dann wird die Auffüllung wie folgt bestimmt
  • Wenn die Anzahl der einzufügenden Zeichen kleiner ist als os.width(), dann werden genügend Kopien von os.fill() zur Zeichensequenz hinzugefügt, um ihre Länge auf os.width() zu bringen.
  • Wenn (out.flags() & std::ios_base::adjustfield) == std::ios_base::left ist, 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 abzubrechen, falls vorhanden.
Wenn s ein Nullzeiger ist, ist das Verhalten undefiniert.
3) Ruft den entsprechenden Einfügeoperator auf, gegeben eine Rvalue-Referenz auf ein Ausgabestream-Objekt (ä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 davon Null-terminierte Sequenzen) akzeptieren, sind gelöscht: std::cout << u'X' ist nicht erlaubt. Zuvor würden diese einen Integer- oder Zeigerwert ausgeben.

Inhalt

[edit] Parameter

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

[edit] Rückgabewert

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

[edit] Hinweise

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

[edit] Beispiel

#include <fstream>
#include <iostream>
 
void foo()
{
    // error: operator<< (basic_ostream<char, _Traits>&, char8_t) is deleted
//  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" // uses `const char*` overload
              << '\n';          // uses `char` overload
    std::ofstream{"test.txt"} << 1.2; // uses rvalue overload
 
    std::cout << u8'!' << '\n'; // uses program-defined operator<<(os, char8_t const&)
}

Ausgabe

Hello, world
!

[edit] Defect Reports

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

[edit] Siehe auch

fügt formatierte Daten ein
(public member function) [bearbeiten]
gibt die formatierten Darstellung der Argumente aus
(Funktionstemplate) [bearbeiten]
erweitert Zeichen
(public member function of std::basic_ios<CharT,Traits>) [bearbeiten]