C++ 命名要求: FormattedInputFunction
來自 cppreference.com
[編輯] 要求
FormattedInputFunction 是一種流輸入函式,它執行以下操作:
- 構造一個具有自動儲存期的 basic_istream::sentry 型別物件,其中
noskipws
引數設定為 false,該物件執行以下操作:
- 如果輸入流上設定了 eofbit 或 badbit,則同時設定
failbit
,並且如果此輸入流的異常掩碼中啟用了failbit
上的異常((exceptions() & failbit) != 0),則丟擲 ios_base::failure。 - 如果適用,重新整理 tie() 繫結的輸出流。
- 如果在此輸入流上設定了
ios_base::skipws
標誌,則從輸入流中提取並丟棄字元,直到以下條件之一變為真:
- 輸入流上下一個可用字元不是空白字元,由當前此輸入流中注入的 locale 的 std::ctype facet 測試。非空白字元未被提取。
- 到達流的末尾,在這種情況下設定
failbit
和eofbit
,並且如果流對其中一個位上的異常是開的,則丟擲 ios_base::failure。
- 如果輸入流上設定了 eofbit 或 badbit,則同時設定
- 透過呼叫
sentry::operator bool()
檢查崗哨的狀態,這等效於 basic_ios::good。 - 如果崗哨返回 false 或崗哨的建構函式丟擲異常,則不進行輸入。
- 如果崗哨返回 true,則執行輸入,如同呼叫 rdbuf()->sbumpc() 或 rdbuf()->sgetc()。
- 如果到達流的末尾(呼叫 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 返回 Traits::eof()),則設定
eofbit
。如果此流的異常掩碼中啟用了eofbit
上的異常((exceptions() & eofbit) != 0),則丟擲 ios_base::failure。 - 如果在輸入過程中丟擲異常,則在輸入流中設定
badbit
。如果此流的異常掩碼中啟用了badbit
上的異常((exceptions() & badbit) != 0),則異常也會被重新丟擲。 - 如果未丟擲異常,則返回 *this。
- 如果到達流的末尾(呼叫 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 返回 Traits::eof()),則設定
- 無論如何,無論是透過異常終止還是返回,在離開此函式之前都會呼叫崗哨的解構函式。
[編輯] 標準庫
以下標準庫函式是 FormattedInputFunctions。
- basic_istream::operator>>(int, long, double, void*, bool)
- operator>>(std::basic_istream, char&)
- operator>>(std::basic_istream, char*)
- operator>>(std::basic_istream, std::bitset)
- operator>>(std::basic_istream, std::string)
-
operator>>
,當對 std::get_money 的返回值呼叫時
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 160 | C++98 | 確定捕獲的異常是否重新丟擲的過程 提到了一個不存在的函式 exception() |
更正為 exceptions() |