C++ Benannte Anforderungen: UnformattedInputFunction
Von cppreference.com
< cpp | benannte req
[bearbeiten] Anforderungen
Eine UnformattedInputFunction ist eine Stream-Eingabefunktion, die Folgendes durchführt:
1) Erstellt ein Objekt vom Typ basic_istream::sentry mit automatischer Speicherverwaltung und dem Argument
noskipws auf true gesetzt, was Folgendes bewirkt:- Wenn
eofbitoderbadbitim Eingabestream gesetzt sind, wird auchfailbitgesetzt. Wenn Ausnahmen fürfailbitin der Ausnahmemaske dieses Eingabestreams aktiviert sind ((exceptions() & failbit) != 0), wird ios_base::failure ausgelöst. - Leert den verbundenen Ausgabestream (tie()'d), falls zutreffend.
2) Überprüft den Status des Sentry-Objekts durch Aufrufen von
sentry::operator bool(), was äquivalent zu basic_ios::good ist.- Wenn der Operator false zurückgibt oder der Konstruktor des Sentry-Objekts eine Ausnahme auslöst.
- Setzt die Anzahl der extrahierten Zeichen (gcount) im Eingabestream auf Null.
- Wenn die Funktion zum Schreiben in ein Array von
CharTaufgerufen wurde, wirdCharT()(das Nullzeichen) an die erste Position des Arrays geschrieben.
- Wenn der Operator true zurückgibt, wird die Eingabe so durchgeführt, als ob rdbuf()->sbumpc() oder rdbuf()->sgetc() aufgerufen würde.
- Wenn das Ende des Streams erreicht ist (der Aufruf von rdbuf()->sbumpc() oder rdbuf()->sgetc() gibt Traits::eof() zurück), wird
eofbitgesetzt. Wenn Ausnahmen füreofbitin der Ausnahmemaske dieses Streams aktiviert sind ((exceptions() & eofbit) != 0), wird ios_base::failure ausgelöst. - Wenn während der Eingabe eine Ausnahme ausgelöst wird, wird
badbitim Eingabestream gesetzt. Wenn Ausnahmen fürbadbitin der Ausnahmemaske dieses Streams aktiviert sind ((exceptions() & badbit) != 0), wird die Ausnahme ebenfalls erneut ausgelöst.
- Ausnahmen, die von basic_ios::clear ausgelöst werden, werden nicht abgefangen oder erneut ausgelöst.
- Wenn während der Eingabe keine Ausnahme ausgelöst wurde, wird die Anzahl der extrahierten Zeichen (gcount) im Eingabestream gesetzt.
- Wenn das Ende des Streams erreicht ist (der Aufruf von rdbuf()->sbumpc() oder rdbuf()->sgetc() gibt Traits::eof() zurück), wird
3) In jedem Fall, ob durch Ausnahme beendet oder durch Rückgabe, wird der Destruktor des Sentry-Objekts aufgerufen, bevor die Funktion verlassen wird.
[bearbeiten] Standardbibliothek
Die folgenden Standardbibliotheksfunktionen sind UnformattedInputFunctions.
- std::getline, mit der Ausnahme, 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, mit der Ausnahme, dass es zuerst
eofbitlöscht. - basic_istream::unget, mit der Ausnahme, dass es zuerst
eofbitlöscht. - basic_istream::sync, mit der Ausnahme, dass es gcount nicht modifiziert.
- basic_istream::tellg, mit der Ausnahme, dass es gcount nicht modifiziert.
- basic_istream::seekg, mit der Ausnahme, dass es zuerst
eofbitlöscht und gcount nicht modifiziert. - std::ws, mit der Ausnahme, dass es gcount nicht modifiziert.
[bearbeiten] 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 61 | C++98 | war unklar, ob das Auslösen einer Ausnahme aufgrund des Setzens von eofbit und/oder failbit zum Setzen von badbit führen würde |
Ausnahmen, die von basic_ios::clear ausgelöst werden nicht abgefangen oder erneut ausgelöst werden |
| LWG 160 | C++98 | Der Prozess zur Bestimmung, ob die abgefangene Ausnahme erneut ausgelöst wird, erwähnte eine nicht existierende Funktion exception(). |
korrigiert zu exceptions() |
| LWG 243 | C++98 | das Verhalten, wenn sentry::operator bool() false zurückgibtoder das Sentry-Objekt nicht konstruiert werden konnte, war nicht spezifiziert |
spezifiziert |