C++ 具名要求:无格式输出函数 (UnformattedOutputFunction)
要求
无格式输出函数 (UnformattedOutputFunction) 是进行下列操作的流输入函数:
- 构造一个具有自动存储期的 basic_ostream::sentry 类型的对象,它进行下列操作
- 若输出流上设置了 eofbit 或 badbit,则一同设置
failbit
,且若此输出流的异常掩码中启用了 failbit 上的异常,则抛出 ios_base::failure。 - 冲洗其所 tie() 的输出流,若适用。
- 若输出流上设置了 eofbit 或 badbit,则一同设置
- 通过调用
sentry::operator bool()
检查 sentry 的状态,等价于 basic_ios::good。 - 若 sentry 返回 false,或 sentry 的构造函数抛出了异常,则不发生输出
- 若 sentry 返回 true,则试图通过插入字符到输出流,如同以调用 rdbuf()->sputc() 或 rdbuf()->xsputn(),进行所欲的输出。另外,可能调用 rdbuf()->overflow() 或 rdbuf()->sync(),但不会调用 std::basic_streambuf 的其他虚函数。
- 若输出中抛出了异常,则设置输出流中的
badbit
。若此流的异常掩码中启用了 badbit 上的异常,则亦会重抛这个异常。 - 若不抛异常,则返回该函数所指定的值。
- 若输出中抛出了异常,则设置输出流中的
- 任何事件中,无论是因异常终止还是返回,离开此函数前都会调用 sentry 的析构函数。
标准库
下列标准库函数是无格式输出函数 (UnformattedOutputFunction) 。
- basic_ostream::operator<<(basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(C++11 起) |