名稱空間
變體
操作

std::basic_istream<CharT,Traits>::sentry

來自 cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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) [編輯]