Namensräume
Varianten
Aktionen

operator>>(std::basic_istream)

Von cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
Definiert in Header <istream>
template< class CharT, class Traits >

basic_istream<CharT, Traits>&
    operator>>( basic_istream<CharT, Traits>& st, CharT& ch );

template< class Traits >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, signed char& ch );

template< class Traits >
basic_istream<char, Traits>&

    operator>>( basic_istream<char, Traits>& st, unsigned char& ch );
(1)
(2)
template< class CharT, class Traits>

basic_istream<CharT, Traits>&
    operator>>( basic_istream<CharT, Traits>& st, CharT* s );

template< class Traits >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, signed char* s );

template< class Traits >
basic_istream<char, Traits>&

    operator>>( basic_istream<char, Traits>& st, unsigned char* s );
(bis C++20)
template< class CharT, class Traits, std::size_t N >

basic_istream<CharT, Traits>&
    operator>>( basic_istream<CharT, Traits>& st, CharT (&s)[N] );

template< class Traits, std::size_t N >
basic_istream<char, Traits>&
    operator>>( basic_istream<char, Traits>& st, signed char (&s)[N] );

template< class Traits, std::size_t N >
basic_istream<char, Traits>&

    operator>>( basic_istream<char, Traits>& st, unsigned char (&s)[N] );
(seit C++20)
template< class Istream, class T >

Istream&&

    operator>>( Istream&& st, T&& value );
(3) (seit C++11)
1,2) Führt Zeichen-Ein-Operationen aus.
1) Verhält sich wie eine FormattedInputFunction. Nach dem Konstruieren und Überprüfen des Sentry-Objekts, das führende Leerzeichen überspringen kann, wird ein Zeichen extrahiert und in ch gespeichert. Wenn kein Zeichen verfügbar ist, wird failbit gesetzt (zusätzlich zu eofbit, das wie für eine FormattedInputFunction erforderlich gesetzt wird).
2) Verhält sich wie eine FormattedInputFunction. Nach dem Konstruieren und Überprüfen des Sentry-Objekts, das führende Leerzeichen überspringen kann, werden aufeinanderfolgende Zeichen extrahiert und an aufeinanderfolgenden Positionen eines Zeichenarrays, dessen erstes Element von(bis C++20) s gezeigt wird, gespeichert. Die Extraktion stoppt, wenn eine der folgenden Bedingungen erfüllt ist:
  • Ein Leerzeichen (gemäß dem ctype<CharT> Facet) wird gefunden. Das Leerzeichen wird nicht extrahiert.
  • Wenn st.width() größer als null ist, werden st.width() - 1 Zeichen gespeichert.
(bis C++20)
  • n - 1 Zeichen werden gespeichert, wobei n wie folgt definiert ist:
  • Wenn st.width() größer als null ist, dann std::min(std::size_t(st.width()), N);
  • andernfalls ist n gleich N.
(seit C++20)
  • Dateiende tritt in der Eingabesequenz auf (dies setzt auch eofbit).
In beiden Fällen wird ein zusätzlicher Nullzeichenwert CharT() am Ende der Ausgabe gespeichert. Wenn keine Zeichen extrahiert wurden, wird failbit gesetzt (das Nullzeichen wird trotzdem geschrieben, an die erste Position in der Ausgabe). Schließlich wird st.width(0) aufgerufen, um die Auswirkungen von std::setw abzubrechen, falls vorhanden.
3) Ruft den entsprechenden Extraktionsoperator auf, gegeben eine rvalue-Referenz auf ein Eingabestream-Objekt (äquivalent zu st >> std::forward<T>(value)). Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn st >> std::forward<T>(value) wohlgeformt ist und Istream ein Klassentyp ist, der öffentlich und eindeutig von std::ios_base abgeleitet ist.

Inhalt

[edit] Anmerkungen

Das Extrahieren eines einzelnen Zeichens, das das letzte Zeichen des Streams ist, setzt eofbit nicht: Dies unterscheidet sich von anderen formatierten Eingabefunktionen, wie dem Extrahieren der letzten Ganzzahl mit operator>>, aber dieses Verhalten entspricht dem Verhalten von std::scanf mit dem Format-Spezifizierer "%c".

[edit] Parameter

st - Eingabestream, aus dem die Daten extrahiert werden sollen
ch - Referenz auf ein Zeichen, in dem das extrahierte Zeichen gespeichert werden soll
s - Zeiger auf(bis C++20) ein Zeichenarray, in dem die extrahierten Zeichen gespeichert werden sollen

[edit] Rückgabewert

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

[edit] Beispiel

#include <iomanip>
#include <iostream>
#include <sstream>
 
int main()
{
    std::string input = "n greetings";
    std::istringstream stream(input);
 
    char c;
    const int MAX = 6;
    char cstr[MAX];
 
    stream >> c >> std::setw(MAX) >> cstr;
    std::cout << "c = " << c << '\n'
              << "cstr = " << cstr << '\n';
 
    double f;
    std::istringstream("1.23") >> f; // rvalue stream extraction
    std::cout << "f = " << f << '\n';
}

Ausgabe

c = n
cstr = greet
f = 1.23

[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 13 C++98 die Definition von n erwähnte einen nicht existierenden Namen eos ersetzt durch CharT()
LWG 68 C++98 keine Nullzeichen wurden am Ende der Ausgabe für Überladung (2) gespeichert speichert ein Nullzeichen
LWG 1203 C++98 Überladung für rvalue-Stream gab eine lvalue-Referenz auf die Basisklasse zurück gibt rvalue-Referenz zurück
an die abgeleitete Klasse
LWG 2328 C++98 Überladung für rvalue-Stream erforderte ein weiteres Argument als lvalue akzeptiert rvalue
LWG 2534 C++98 Überladung für rvalue-Stream war nicht eingeschränkt eingeschränkt

[edit] Siehe auch

extrahiert formatierte Daten
(public member function) [bearbeiten]