Namensräume
Varianten
Aktionen

std::basic_istream<CharT,Traits>:operator>>

Von cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
basic_istream& operator>>( unsigned short& value );
(1)
basic_istream& operator>>( unsigned int& value );
(2)
basic_istream& operator>>( long& value );
(3)
basic_istream& operator>>( unsigned long& value );
(4)
basic_istream& operator>>( long long& value );
(5) (seit C++11)
basic_istream& operator>>( unsigned long long& value );
(6) (seit C++11)
basic_istream& operator>>( float& value );
(7)
basic_istream& operator>>( double& value );
(8)
basic_istream& operator>>( long double& value );
(9)
basic_istream& operator>>( bool& value );
(10)
basic_istream& operator>>( void*& value );
(11)
basic_istream& operator>>( short& value );
(12)
basic_istream& operator>>( int& value );
(13)
basic_istream& operator>>( /* extended-floating-point-type */& value );
(14) (seit C++23)
basic_istream& operator>>( std::ios_base& (*func)(std::ios_base&) );
(15)
basic_istream& operator>>( std::basic_ios<CharT, Traits>&
                               (*func)(std::basic_ios<CharT, Traits>&) );
(16)
basic_istream& operator>>( basic_istream& (*func)(basic_istream&) );
(17)
basic_istream& operator>>( std::basic_streambuf<CharT, Traits>* sb );
(18)

Extrahiert Werte aus einem Eingabestrom.

1-11) Extrahiert einen Wert, wobei vorausgehende Leerzeichen möglicherweise übersprungen werden. Der Wert wird in eine gegebene Referenz value gespeichert.
Diese Funktion verhält sich wie eine FormattedInputFunction. Nach der Erstellung und Überprüfung des Sentry-Objekts, das führende Leerzeichen überspringen kann, wird ein Wert durch Aufruf von std::num_get::get() extrahiert.
12) Extrahiert einen short-Wert, wobei vorausgehende Leerzeichen möglicherweise übersprungen werden. Der Wert wird in eine gegebene Referenz value gespeichert.
Diese Funktion verhält sich wie eine FormattedInputFunction. Nach der Erstellung und Überprüfung des Sentry-Objekts, das führende Leerzeichen überspringen kann, wird ein long-Wert lval durch Aufruf von std::num_get::get() extrahiert. Danach
13) Extrahiert einen int-Wert, wobei vorausgehende Leerzeichen möglicherweise übersprungen werden. Der Wert wird in eine gegebene Referenz value gespeichert.
Diese Funktion verhält sich wie eine FormattedInputFunction. Nach der Erstellung und Überprüfung des Sentry-Objekts, das führende Leerzeichen überspringen kann, wird ein long-Wert lval durch Aufruf von std::num_get::get() extrahiert. Danach
14) Extrahiert einen erweiterten Gleitkommawert, wobei vorausgehende Leerzeichen möglicherweise übersprungen werden. Der Wert wird in eine gegebene Referenz value gespeichert. Die Bibliothek stellt Überladungen für alle cv-unqualifizierten erweiterten Gleitkommatypen als Referenztyp des Parameters value bereit.
Bestimmt den Standard-Gleitkommatyp `FP` wie folgt:
  • Wenn der Rang der Gleitkomma-Konvertierung von /* extended-floating-point-type */ kleiner oder gleich dem von float ist, dann ist `FP` float.
  • Andernfalls, wenn der Rang der Gleitkomma-Konvertierung von /* extended-floating-point-type */ kleiner oder gleich dem von double ist, dann ist `FP` double.
  • Andernfalls ist `FP` long double.
Diese Funktion verhält sich wie eine FormattedInputFunction. Nach der Erstellung und Überprüfung des Sentry-Objekts, das führende Leerzeichen überspringen kann, wird ein `FP`-Wert fval durch Aufruf von std::num_get::get() extrahiert. Danach
  • Wenn fval < -std::numeric_limits</* extended-floating-point-type */>::max(), wird `failbit` gesetzt und -std::numeric_limits</* extended-floating-point-type */>::max() in val gespeichert.
  • Andernfalls, wenn std::numeric_limits</* extended-floating-point-type */>::max() < fval, wird `failbit` gesetzt und std::numeric_limits</* extended-floating-point-type */>::max() in val gespeichert.
  • Andernfalls wird static_cast</* extended-floating-point-type */>(fval) in val gespeichert.
15-17) Ruft func(*this) auf, wobei func ein I/O-Manipulator ist.
18) Verhält sich wie eine UnformattedInputFunction. Nach der Erstellung und Überprüfung des Sentry-Objekts extrahiert es alle Daten aus *this und speichert sie in sb. Die Extraktion stoppt, wenn eine der folgenden Bedingungen erfüllt ist:
  • Das Dateiende wird in der Eingabesequenz erreicht;
  • Das Einfügen in die Ausgabesequenz schlägt fehl (in diesem Fall wird das einzufügende Zeichen nicht extrahiert);
  • Eine Ausnahme tritt auf (in diesem Fall wird die Ausnahme abgefangen und nur neu ausgelöst, wenn sie keine Zeichen eingefügt hat und `failbit` in `exceptions()` aktiviert ist).
In jedem Fall wird die Anzahl der extrahierten Zeichen in der Member-Variable gespeichert, auf die durch nachfolgende Aufrufe von gcount() zugegriffen wird. Wenn sb ein Nullzeiger ist oder wenn keine Zeichen in sb eingefügt wurden, wird setstate(failbit) aufgerufen (was std::ios_base::failure auslösen kann, wenn aktiviert).

Wenn die Extraktion fehlschlägt (z. B. wenn eine Buchstabe eingegeben wurde, wo eine Ziffer erwartet wurde), wird Null in value geschrieben und `failbit` gesetzt. Für vorzeichenbehaftete Ganzzahlen, wenn die Extraktion dazu führt, dass der Wert zu groß oder zu klein ist, um in value zu passen, werden std::numeric_limits<T>::max() oder std::numeric_limits<T>::min() (bzw.) geschrieben und das Flag `failbit` gesetzt. Für vorzeichenlose Ganzzahlen, wenn die Extraktion dazu führt, dass der Wert zu groß oder zu klein ist, um in value zu passen, wird std::numeric_limits<T>::max() geschrieben und das Flag `failbit` gesetzt.

Inhalt

[edit] Parameter

value - Referenz auf einen Ganzzahl- oder Gleitkommawert, in den der extrahierte Wert gespeichert werden soll
func - Zeiger auf eine I/O-Manipulatorfunktion
sb - Zeiger auf den Strompuffer, in den alle Daten geschrieben werden sollen

[edit] Rückgabewert

1-16,18) *this
17) func(*this)

[edit] Hinweise

Für die Überladung (14) kann es bei der Konvertierung aufgrund der doppelten Rundung zu ungenauen Ergebnissen kommen, wenn der erweiterte Gleitkommatyp einen Gleitkomma-Konvertierungsrang aufweist, der nicht dem Rang eines Standard-Gleitkommatyps entspricht. std::from_chars() kann in Situationen verwendet werden, in denen maximale Genauigkeit wichtig ist.

[edit] Beispiel

#include <iomanip>
#include <iostream>
#include <sstream>
 
int main()
{
    std::string input = "41 3.14 false hello world";
    std::istringstream stream(input);
 
    int n;
    double f;
    bool b;
 
    stream >> n >> f >> std::boolalpha >> b;
    std::cout << "n = " << n << '\n'
              << "f = " << f << '\n'
              << "b = " << std::boolalpha << b << '\n';
 
    // extract the rest using the streambuf overload
    stream >> std::cout.rdbuf();
    std::cout << '\n';
}

Ausgabe

n = 41
f = 3.14
b = false
hello world

[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 64 C++98 war unklar, ob Überladung (18) nur die neu auslösen kann
std::ios_base::failure, die beim Aufrufen von setstate(failbit) ausgelöst wird
alle abgefangenen Ausnahmen
neu ausgelöst werden können
LWG 118 C++98 Überladung (12,13) delegierte die Extraktion an num_get::get,
aber es gibt keine Überladungen für short und int
ein long-Wert wird extrahiert
anstatt short oder int
LWG 413 C++98 Überladung (18) löste nur Ausnahmen neu aus, die beim Extrahieren ausgelöst wurden
Zeichen aus sb, aber Zeichen werden aus *this extrahiert
korrigiert sb zu *this
LWG 567 C++98 Überladung (18) verhielt sich wie eine FormattedInputFunction
verhielt sich als
es verhält sich wie ein
UnformattedInputFunction
LWG 661 C++98 Überladungen (12,13) speicherten die extrahierte Zahl nicht
in value aufgrund der Auflösung von LWG Issue 118
speichert die Zahl, wenn
kein Überlauf auftritt
LWG 696 C++98 value wurde bei Extraktionsfehlern unverändert auf Null oder Minimum/
Maximumswerte gesetzt

[edit] Siehe auch

extrahiert Zeichen und Zeichen-Arrays
(function template) [bearbeiten]
führt Stream-Ein- und -Ausgabe auf Strings durch
(function template) [edit]
führt Stream-Ein- und -Ausgabe von Bitsets durch
(function template) [edit]
serialisiert und deserialisiert eine komplexe Zahl
(function template) [edit]
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlengeneratoren durch
(function template) [edit]
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlendistributionen durch
(function template) [edit]
extrahiert Zeichenblöcke
(public member function) [bearbeiten]
extrahiert bereits verfügbare Zeichenblöcke
(public member function) [bearbeiten]
extrahiert Zeichen
(public member function) [bearbeiten]
extrahiert Zeichen, bis das gegebene Zeichen gefunden wird
(public member function) [bearbeiten]
konvertiert eine Zeichensequenz in einen Ganzzahl- oder Gleitkommawert
(Funktion) [bearbeiten]