public member class
<ostream> <iostream>

std::ostream::sentry

class sentry;
为输出准备流
成员类,用于在每次输出操作之前和之后执行一系列操作

它的构造函数按以下顺序对传递给它的流对象执行以下操作
  • 如果其内部错误标志中的任何一个被设置,则函数可能会设置其failbit标志并返回。
  • 如果它是一个绑定的流,则函数会刷新它所绑定的流(如果其输出缓冲区不为空),除非函数确定不需要同步。
    失败时,它可能会设置failbit标志。

其析构函数对同一流对象执行以下操作(按此顺序)

实现可能会使用sentry对象的构造和析构来对流执行额外的初始化或清理操作,这些操作是所有输出操作共有的。

所有执行输出操作的成员函数都会自动构造一个该类的对象,然后对其进行求值(如果没有任何状态标志被设置,则返回true)。只有当此对象求值为true时,该函数才会尝试输出操作(否则,它将在不执行的情况下返回)。在返回之前,该函数会销毁sentry对象。

此类结构为
1
2
3
4
5
6
7
8
9
class sentry {
public:
  explicit sentry (ostream& os);
  ~sentry();
  operator bool() const;
private:
  sentry (const sentry&);             // not defined
  sentry& operator= (const sentry&);  // not defined
};
1
2
3
4
5
6
7
8
class sentry {
public:
  explicit sentry (ostream& os);
  ~sentry();
  explicit operator bool() const;
  sentry (const sentry&) = delete;
  sentry& operator= (const sentry&) = delete;
};

成员

explicit sentry (ostream& os);
为输出操作准备输出流,执行上述操作。
~sentry();
执行上述操作。
explicit operator bool() const;
当对象被求值时,它返回一个bool值,指示sentry构造函数是否成功执行了其所有任务:如果在构造过程的某个时刻设置了内部错误标志,则此函数对于该对象始终返回false

另见