std::basic_istream<CharT,Traits>::sentry
class sentry; |
||
在 std::basic_istream 的每個執行輸入(包括格式化和非格式化)的成員函式的開頭,都會在區域性作用域中構造一個 basic_istream::sentry
類的物件。其建構函式會準備輸入流:檢查流是否已經處於失敗狀態,重新整理 tie()'d 的輸出流,除非設定了 noskipws 標誌,否則跳過前導空白符,並在必要時執行其他實現定義的任務。所有清理工作(如果必要)都在解構函式中執行,以確保在輸入期間丟擲異常時也能進行清理。
目錄 |
[編輯] 成員型別
traits_type
|
特性
|
[編輯] 成員函式
(建構函式) |
構造崗哨物件。所有準備任務都在這裡完成。 (public member function) |
(解構函式) |
在格式化輸入後或異常後,如有必要,完成流物件的最終化。 (public member function) |
operator= [已刪除] |
不可複製賦值 (公開成員函式) |
operator bool |
檢查流物件的準備是否成功 (public member function) |
std::basic_istream::sentry::sentry
explicit sentry( std::basic_istream<CharT, Traits>& is, bool noskipws = false ); |
||
準備流以進行格式化輸入。
如果 is.good() 為 false,則呼叫 is.setstate(std::ios_base::failbit) 並返回。否則,如果 is.tie() 不是空指標,則呼叫 is.tie()->flush() 以將輸出序列與外部流同步。如果 is.tie() 的 put 區域為空,則可以抑制此呼叫。實現可以將對 flush() 的呼叫推遲到呼叫 is.rdbuf()->underflow() 發生時。如果在 sentry 物件銷燬之前沒有發生此類呼叫,則可以完全取消它。
如果 noskipws 為零且 is.flags() & std::ios_base::skipws 不為零,則函式提取並丟棄所有空白字元,直到下一個可用字元不是空白字元(由 is 中當前嵌入的 locale 確定)。如果 is.rdbuf()->sbumpc() 或 is.rdbuf()->sgetc() 返回 traits::eof(),則函式呼叫 setstate(std::ios_base::failbit | std::ios_base::eofbit)(這可能會丟擲 std::ios_base::failure)。
可能會進行額外的實現定義的準備,這可能會呼叫 setstate(std::ios_base::failbit)(這可能會丟擲 std::ios_base::failure)。
如果準備完成後,is.good() == true,則對 operator bool 的任何後續呼叫都將返回 true。
引數
is | - | 要準備的輸入流 |
noskipws | - | 如果應跳過空白符,則為 true |
異常
如果在跳過空白符時發生檔案結束條件,則丟擲 std::ios_base::failure。
std::basic_istream::sentry::~sentry
~sentry(); |
||
不執行任何操作。
std::basic_istream::sentry::operator bool
explicit operator bool() const; |
||
檢查輸入流的準備是否成功。
引數
(無)
返回值
如果輸入流的初始化成功,則為 true,否則為 false。
[編輯] 示例
#include <iostream> #include <sstream> struct Foo { char n[5]; }; std::istream& operator>>(std::istream& is, Foo& f) { std::istream::sentry s(is); if (s) is.read(f.n, 5); return is; } int main() { std::string input = " abcde"; std::istringstream stream(input); Foo f; stream >> f; std::cout.write(f.n, 5); std::cout << '\n'; }
輸出
abcde
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 195 | C++98 | 不清楚建構函式是否會設定 eofbit |
已明確 |
LWG 419 | C++98 | 如果 eofbit 已設定,則建構函式未設定 failbit |
在這種情況下設定 failbit |
[編輯] 參閱
提取格式化資料 (public member function) | |
提取字元和字元陣列 (function template) |