public member class
<ostream> <iostream>

std::basic_ostream::sentry

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

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

它的析构函数按以下顺序对同一流对象执行以下操作

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

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

此类结构为
1
2
3
4
5
6
7
8
9
class sentry {
public:
  explicit sentry (basic_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 (basic_ostream& os);
  ~sentry();
  explicit operator bool() const;
  sentry (const sentry&) = delete;
  sentry& operator= (const sentry&) = delete;
};

成员

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

另见