std::basic_ostream<CharT,Traits>::sentry
< cpp | io | basic ostream
class sentry; |
||
类 basic_ostream::sentry
的对象在 std::basic_ostream 的每个进行输出(有格式与无格式)的成员函数起始的局部作用域中构造。其构造函数准备输出流:检查流是否已在失败状态,冲入所 tie() 的输出流,并且若需要则进行其他实现定义的任务。实现定义的清理,还有若有必要的输出流冲入,在析构函数中进行,从而保证若输出中抛出异常则得到执行。
成员函数
(构造函数) |
构造 sentry 对象。所有准备任务都在此完成。 (公开成员函数) |
(析构函数) |
在有格式输入后或异常后终止化流对象,若有必要 (公开成员函数) |
operator= |
赋值运算符被删除 (公开成员函数) |
operator bool |
检查流对象的准备是否成功 (公开成员函数) |
std::basic_ostream::sentry::sentry
explicit sentry( std::basic_ostream<CharT,Traits>& os ); |
||
为有格式输出准备流。
若 os.good() 为 false 则返回。否则若 os.tie() 不是空指针,则调用 os.tie()->flush() 以令输出序列同步于外部流。在准备中,构造函数可能调用 setstate(failbit) (它可能抛出 std::ios_base::failure )。
若在准备完成后 os.good() == true ,则任何对 operator bool 的后继调用都会返回 true 。
参数
os | - | 要准备的输出流 |
异常
若文件尾条件出现则为 std::ios_base::failure。
std::basic_ostream::sentry::~sentry
~sentry(); |
||
若 (os.flags() & std::ios_base::unitbuf) && !std::uncaught_exception() && os.good()) 为 true ,则调用 os.rdbuf()->pubsync() 。若该函数返回 -1 ,则于 os.rdstate() 中设置 badbit ,而不传播异常。
std::basic_ostream::sentry::operator bool
explicit operator bool() const; |
||
检查输出流的准备是否成功。
参数
(无)
返回值
若输出流的准备成功则为 true ,否则为 false 。
示例
运行此代码
#include <iostream> #include <sstream> struct Foo { char n[6]; }; std::ostream& operator<<(std::ostream& os, Foo& f) { std::ostream::sentry s(os); if (s) { os.write(f.n, 5); } return os; } int main() { Foo f = { "abcde" }; std::cout << f << '\n'; }
输出:
abcde
参阅
插入带格式数据 (公开成员函数) |