C++ named requirements: UnformattedInputFunction
From cppreference.net
Anforderungen
Eine UnformattedInputFunction ist eine Stream-Eingabefunktion, die Folgendes ausführt:
1)
Konstruiert ein Objekt vom Typ
basic_istream::sentry
mit automatischer Speicherdauer und mit dem
noskipws
Argument gesetzt auf
true
, was folgendes ausführt:
-
Falls
eofbit
oder
badbit
im Eingabestrom gesetzt sind, setzt ebenfalls das
failbit
, und falls Exceptions für
failbitin der Exception-Maske dieses Eingabestroms aktiviert sind ( ( exceptions ( ) & failbit ) ! = 0 ), wirft ios_base::failure . - Leert den tie()'d Ausgabestrom, falls zutreffend.
2)
Überprüft den Status des Sentry durch Aufruf von
sentry::operator bool()
, was äquivalent zu
basic_ios::good
ist.
- Falls der Operator false zurückgibt oder der Konstruktor des Sentry eine Exception wirft:
-
- Setzt die Anzahl extrahierter Zeichen (gcount) im Eingabestrom auf null.
-
Falls die Funktion zum Schreiben in ein Array von
CharTaufgerufen wurde, schreibtCharT()(das Nullzeichen) an die erste Position des Arrays.
- Falls der Operator true zurückgibt, führt die Eingabe durch, als ob rdbuf ( ) - > sbumpc ( ) oder rdbuf ( ) - > sgetc ( ) aufgerufen würde.
-
-
Falls das Ende des Stroms erreicht wird (der Aufruf von
rdbuf
(
)
-
>
sbumpc
(
)
oder
rdbuf
(
)
-
>
sgetc
(
)
gibt
Traits
::
eof
(
)
zurück), setzt
eofbit. Falls Exceptions füreofbitin der Exception-Maske dieses Stroms aktiviert sind ( ( exceptions ( ) & eofbit ) ! = 0 ), wirft ios_base::failure . -
Falls während der Eingabe eine Exception geworfen wird, setzt
badbitim Eingabestrom. Falls Exceptions fürbadbitin der Exception-Maske dieses Stroms aktiviert sind ( ( exceptions ( ) & badbit ) ! = 0 ), wird die Exception ebenfalls erneut geworfen.
-
- Von basic_ios::clear geworfene Exceptions werden nicht abgefangen oder erneut geworfen.
- Falls während der Eingabe keine Exception geworfen wurde, setzt die Anzahl extrahierter Zeichen (gcount) im Eingabestrom.
-
Falls das Ende des Stroms erreicht wird (der Aufruf von
rdbuf
(
)
-
>
sbumpc
(
)
oder
rdbuf
(
)
-
>
sgetc
(
)
gibt
Traits
::
eof
(
)
zurück), setzt
3)
In jedem Fall, ob durch Exception beendet oder durch Rückkehr, wird der Destruktor des Sentry aufgerufen, bevor diese Funktion verlassen wird.
Standardbibliothek
Die folgenden Standardbibliotheksfunktionen sind UnformattedInputFunction s .
- std::getline , außer dass es gcount nicht modifiziert.
- basic_istream::operator>> (basic_streambuf*)
- basic_istream::get
- basic_istream::getline
- basic_istream::ignore
- basic_istream::peek
- basic_istream::read
- basic_istream::readsome
-
basic_istream::putback
, außer dass es zuerst
eofbitlöscht -
basic_istream::unget
, außer dass es zuerst
eofbitlöscht - basic_istream::sync , außer dass es gcount nicht modifiziert
- basic_istream::tellg , außer dass es gcount nicht modifiziert
-
basic_istream::seekg
, außer dass es zuerst
eofbitlöscht und gcount nicht modifiziert - std::ws , außer dass es gcount nicht modifiziert
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 61 | C++98 |
Es war unklar, ob das Werfen einer Exception aufgrund
des Setzens von
eofbit
und/oder
failbit
zum Setzen von
badbit
führt
|
Exceptions, die von
basic_ios::clear
geworfen werden, werden nicht abgefangen oder erneut geworfen |
| LWG 160 | C++98 |
Der Prozess zur Bestimmung, ob die abgefangene Exception
erneut geworfen wird, erwähnte eine nicht existierende Funktion
exception()
|
Korrigiert zu exceptions() |
| LWG 243 | C++98 |
Das Verhalten, wenn
sentry::operator bool()
false
zurückgibt oder das Sentry-Objekt nicht konstruiert werden kann, war nicht spezifiziert |
Spezifiziert |