operator>>(std::basic_istream)
Von de.cppreference.net
| 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) | |
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 );
|
(2) | (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 Zeicheneingabeoperationen durch.
1) Verhält sich wie eine FormattedInputFunction. Nach dem Erstellen und Prü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 von einer FormattedInputFunction gefordert gesetzt wird).2) Verhält sich wie eine FormattedInputFunction. Nach dem Erstellen und Prüfen des Sentry-Objekts, das führende Leerzeichen überspringen kann, werden aufeinanderfolgende Zeichen extrahiert und an aufeinanderfolgenden Positionen eines Zeichenarrays gespeichert, dessen erstes Element von (bis C++20)
s gezeigt wird. Die Extraktion stoppt, wenn eine der folgenden Bedingungen erfüllt ist:
- Ein Leerzeichen (gemäß der ctype<CharT> Facette) wird gefunden. Das Leerzeichen wird nicht extrahiert.
|
(bis C++20) |
|
(seit C++20) |
- Das Dateiende tritt in der Eingabesequenz auf (dies setzt auch eofbit).
CharT() am Ende der Ausgabe gespeichert. Wenn keine Zeichen extrahiert wurden, wird failbit gesetzt (das Nullzeichen wird dennoch an die erste Position der Ausgabe geschrieben). Schließlich wird st.width(0) aufgerufen, um die Wirkungen von std::setw aufzuheben, falls vorhanden.3) Ruft den entsprechenden Extraktionsoperator auf, gegeben eine Rvalue-Referenz auf ein Eingabestromobjekt (ä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.Hinweise
Das Extrahieren eines einzelnen Zeichens, das das letzte Zeichen des Streams ist, setzt nicht
eofbit
: 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
"%c"
Format-Spezifizierer.
Parameter
| st | - | Eingabestrom, aus dem die Daten extrahiert werden |
| ch | - | Referenz auf ein Zeichen, in dem das extrahierte Zeichen gespeichert wird |
| s | - | Zeiger auf (bis C++20) ein Zeichenarray, in dem die extrahierten Zeichen gespeichert werden |
Rückgabewert
1,2)
st
3)
std
::
move
(
st
)
Beispiel
Code ausführen
#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
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 13 | C++98 | die Definition von n erwähnte einen nicht existierenden Namen eos | ersetzt durch CharT ( ) |
| LWG 68 | C++98 | für Überladung (2) wurden keine Nullzeichen am Ende der Ausgabe gespeichert | speichert ein Nullzeichen |
| LWG 1203 | C++98 | Überladung für Rvalue-Stream gab Lvalue-Referenz auf die Basisklasse zurück |
gibt Rvalue-Referenz
auf die abgeleitete Klasse zurück |
| LWG 2328 | C++98 | Überladung für Rvalue-Stream erforderte, dass ein weiteres Argument ein Lvalue ist | wurde geändert, um Rvalue zu akzeptieren |
| LWG 2534 | C++98 | Überladung für Rvalue-Stream war nicht eingeschränkt | eingeschränkt |
Siehe auch
|
extrahiert formatierte Daten
(öffentliche Elementfunktion) |