std::ios_base::iostate
來自 cppreference.com
typedef /*implementation defined*/ iostate; |
||
static constexpr iostate goodbit = 0; |
||
static constexpr iostate badbit = /* implementation defined */ static constexpr iostate failbit = /* implementation defined */ |
||
指定流狀態標誌。它是一個 BitmaskType,定義了以下常量
常量 | 解釋 |
goodbit | 無錯誤 |
badbit | 不可恢復的流錯誤 |
failbit | 輸入/輸出操作失敗(格式化或提取錯誤) |
eofbit | 關聯的輸入序列已到達檔案末尾 |
目錄 |
[編輯] eofbit
eofbit 由以下標準庫函式設定
- 字串輸入函式 std::getline,如果它透過到達流的末尾而不是到達指定的終止字元來完成。
- basic_istream::operator>> 的數值輸入過載,如果在 num_get::get 處理的第 2 階段讀取下一個字元時遇到流的末尾。根據解析狀態,
failbit
可能同時設定,也可能不設定:例如,int n; istringstream buf("1"); buf >> n; 設定了eofbit
,但沒有設定failbit
:整數 1 已成功解析並存儲在n
中。另一方面,bool b; istringstream buf("tr"); buf >> boolalpha >> b; 同時設定了eofbit
和failbit
:字元不足以完成布林值 true 的解析。 - operator>>std::basic_istream 的字元提取過載,如果在提取字元數量限制(如果有)之前到達流的末尾。
- std::get_time I/O 操縱器和任何 std::time_get 解析函式:time_get::get、time_get::get_time、time_get::get_date 等,如果在處理解析預期日期/時間值所需的最後一個字元之前到達流的末尾。
- std::get_money I/O 操縱器和 money_get::get 函式,如果在處理解析預期貨幣值所需的最後一個字元之前到達流的末尾。
- basic_istream::sentry 建構函式,在每個格式化輸入函式開始時執行:除非
skipws
位未設定(例如透過發出 std::noskipws),否則 sentry 讀取並丟棄前導空白字元。如果在該操作期間到達輸入流的末尾,則eofbit
和failbit
都將被設定,並且不會進行輸入。 - I/O 操縱器 std::ws,如果在消耗空白時到達流的末尾(但與格式化輸入 sentry 不同,在這種情況下它不會設定
failbit
)。 - 非格式化輸入函式 basic_istream::read、basic_istream::get、basic_istream::peek、basic_istream::readsome、basic_istream::ignore 和 basic_istream::getline,當到達流的末尾時。
- 丟棄輸入函式 basic_istream::ignore,當在到達指定分隔符字元之前到達流的末尾時。
- 立即輸入函式 basic_istream::readsome,如果 basic_streambuf::in_avail 返回 -1。
以下函式作為副作用清除 eofbit
請注意,在幾乎所有情況下,如果設定了 eofbit,則 failbit 也將設定。
[編輯] failbit
failbit 由以下標準庫函式設定
- basic_istream::sentry 建構函式,在每個輸入函式開始時執行,如果流上已設定
eofbit
或badbit
,或者在消耗前導空白時遇到流的末尾。 - basic_ostream::sentry 建構函式,在每個輸出函式開始時執行,在實現定義的條件下。
- operator>>(std::basic_string<>) 如果函式沒有從輸入流中提取任何字元。
- operator>>(std::complex<>) 如果函式未能提取有效的複數。
- 字元陣列和單字元過載的 operator>>,如果它們未能提取任何字元。
- basic_istream::operator>> 的 streambuf 過載,如果 streambuf 引數為空指標,或者如果 streambuf 中沒有插入任何字元。
- basic_ostream::operator<< 的 streambuf 過載,如果函式沒有插入任何字元。
- operator>>(std::bitset<>) 如果函式沒有從輸入流中提取任何字元。
- std::getline 如果函式沒有提取任何字元,或者如果它在沒有遇到分隔符的情況下填充了提供的緩衝區,或者如果提供的緩衝區大小小於 1。
- basic_istream::operator>> 的數值、指標和布林輸入過載(技術上,它們呼叫的 num_get::get 的過載),如果輸入無法解析為有效值,或者如果解析的值不適合目標型別。
- 時間輸入操縱器 std::get_time(技術上,它呼叫的 time_get::get),如果輸入無法根據給定的格式字串明確解析為時間值。
- 貨幣輸入操縱器 std::get_money(技術上,它呼叫的 money_get::get),如果輸入無法根據區域設定規則明確解析為貨幣值。
- 所有 RandomNumberEngine 的提取運算子,如果遇到錯誤輸入。
- 所有 RandomNumberDistribution 的提取運算子,如果遇到錯誤輸入。
- 非格式化輸入函式 basic_istream::get,如果它們未能提取任何字元。
- basic_istream::getline,如果它沒有提取任何字元,如果它在沒有遇到分隔符的情況下填滿了提供的緩衝區,或者如果提供的緩衝區大小小於 1。
- basic_istream::read,如果輸入流上發生檔案結束條件,而未能提取所有請求的字元。
- basic_istream::seekg 失敗時
- basic_ostream::tellp 失敗時
- 接受檔名引數的 std::basic_fstream、std::basic_ifstream 和 std::basic_ofstream 建構函式,如果檔案無法開啟。
- basic_fstream::open、basic_ifstream::open 和 basic_ofstream::open,如果檔案無法開啟。
- basic_fstream::close、basic_ifstream::close 和 basic_ofstream::close,如果檔案無法關閉。
[編輯] badbit
badbit 由以下標準庫函式設定
- basic_ostream::put 如果由於任何原因未能將字元插入輸出流。
- basic_ostream::write 如果由於任何原因未能將字元插入輸出流。
- 格式化輸出函式 operator<<、std::put_money 和 std::put_time,如果它們在完成輸出之前遇到輸出流的末尾。
- basic_ios::init 在使用空指標初始化流的
rdbuf()
時呼叫。 - basic_istream::putback 和 basic_istream::unget 在對具有空
rdbuf()
的流呼叫時。 - basic_ostream::operator<<(basic_streambuf*) 在傳入空指標作為引數時。
- basic_istream::putback 和 basic_istream::unget 如果 rdbuf()->sputbackc() 或 rdbuf()->sungetc() 返回 traits::eof()。
- basic_istream::sync、basic_ostream::flush 和每個
unitbuf
輸出流上的每個輸出函式,如果 rdbuf()->pubsync() 返回 -1。 - 每個流 I/O 函式,如果關聯流緩衝區的任何成員函式丟擲異常(例如
sbumpc()
、xsputn()
、sgetc()
、overflow()
等)。 - ios_base::iword 和 ios_base::pword 失敗時(例如未能分配記憶體)。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 另請參閱
下表顯示了 basic_ios 訪問器(good()、fail() 等)對於 ios_base::iostate 標誌所有可能組合的值
ios_base::iostate 標誌 | basic_ios 訪問器 | |||||||
eofbit
|
failbit
|
badbit
|
good() | fail() | bad() | eof() | operator bool | operator! |
false | false | false | true | false | false | false | true | false |
false | false | true | false | true | true | false | false | true |
false | true | false | false | true | false | false | false | true |
false | true | true | false | true | true | false | false | true |
true | false | false | false | false | false | true | true | false |
true | false | true | false | true | true | true | false | true |
true | true | false | false | true | false | true | false | true |
true | true | true | false | true | true | true | false | true |
返回狀態標誌 ( std::basic_ios<CharT,Traits> 的公共成員函式) | |
設定狀態標誌 ( std::basic_ios<CharT,Traits> 的公共成員函式) | |
修改狀態標誌 ( std::basic_ios<CharT,Traits> 的公共成員函式) |