C++ 命名要求: FormattedOutputFunction
来自 cppreference.cn
目录 |
[编辑] 要求
FormattedOutputFunction 是一个流输出函数,执行以下操作
- 构造一个具有自动存储持续时间的 basic_ostream::sentry 类型的对象,该对象执行以下操作
- 如果输出流上设置了 eofbit 或 badbit,则也设置
failbit
,并且如果在此输出流的 异常掩码 中启用了failbit
异常 ((exceptions() & failbit) != 0),则抛出 ios_base::failure。 - 刷新 tie()'d 输出流(如果适用)。
- 如果输出流上设置了 eofbit 或 badbit,则也设置
- 通过调用
sentry::operator bool()
检查 sentry 的状态,这等效于 basic_ios::good。 - 如果 sentry 返回 false 或 sentry 的构造函数抛出异常,则不进行任何输出。
- 如果 sentry 返回 true,则尝试通过将字符插入到输出流中来执行所需的输出,就像通过调用 rdbuf()->sputc() 一样。也可以使用 std::basic_ostream 的其他公共成员,但永远不会调用 rdbuf() 的虚成员,除了 overflow()、xsputn() 和 sync()。
- 如果无法生成输出,则设置
failbit
。如果在此流的 异常掩码 中启用了failbit
异常 ((exceptions() & failbit) != 0),则抛出 ios_base::failure。 - 如果在输出期间抛出异常,则在输出流中设置
badbit
。如果在此流的 异常掩码 中启用了badbit
异常 ((exceptions() & badbit) != 0),则也会重新抛出该异常。 - 如果没有抛出异常,则返回 *this。
- 如果无法生成输出,则设置
- 在任何情况下,无论是因异常终止还是返回,sentry 的析构函数都会在本函数退出之前被调用。
[编辑] 填充
格式化输出函数根据 std::num_put::do_put() 阶段 3 确定填充。 |
(直到 C++14) |
如果流 os 的格式化输出函数确定了填充,则它会按如下方式进行。 给定一个 如果 (os.flags() & std::ios_base::adjustfield) == std::ios_base::left 为 true,则填充字符放在字符序列之后;否则,它们放在字符序列之前。 |
(自 C++14 起) |
[编辑] 标准库
以下标准库函数是 FormattedOutputFunction。
- basic_ostream::operator<<(std::basic_ostream&, int / long / double / void* / bool)
- operator<<(std::basic_ostream&, char)
- operator<<(std::basic_ostream&, char*)
- operator<<(std::basic_ostream&, const std::bitset&)
- operator<<(std::basic_ostream&, const std::basic_string&)
-
operator<<
,当在 std::put_money 的返回值上调用时
(自 C++17 起) |
|
(自 C++23 起) |
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 160 | C++98 | 确定捕获的异常是否被重新抛出的过程 提到了一个不存在的函数 exception() |
更正为 exceptions() |
LWG 165 | C++98 | 唯一允许在 rdbuf() 上调用的虚成员是 overflow() 唯一允许在 rdbuf() 上调用的虚成员是 overflow() |
也允许xsputn() 和 sync() |