跳到主要内容

C++ 命名需求: UnformattedOutputFunction (非格式化输出函数)

要求

一个 UnformattedOutputFunction (非格式化输出函数) 是一个执行以下操作的流输出函数:

  • 构造一个类型为 basic_istream::sentry 的对象,该对象具有自动存储期,并且 noskipws 参数设置为 true,执行以下操作:

    • 如果输出流上设置了 eofbitbadbit,则也设置 failbit,并且如果此输出流的 异常掩码 ((exceptions() & failbit) != 0) 启用了 failbit 上的异常,则抛出 ios_base::failure
    • 如果适用,刷新 tie() 的输出流。
  • 通过调用 sentry::operator bool() 检查哨兵的状态,这等同于 basic_ios::good

    • 如果操作符返回 false 或 sentry 的构造函数抛出异常,则不发生输出。
    • 如果操作符返回 true,则尝试通过将字符插入输出流来执行所需的输出,就像调用 rdbuf()->sputc() 一样。std::basic_ostream 的其他公共成员也可以使用,但 rdbuf() 的虚成员(除了 overflow()xsputn()sync())将永远不会被调用。
      • 如果在输出期间抛出异常,则在输出流中设置 badbit。如果此流的 异常掩码 ((exceptions() & failbit) != 0) 启用了 badbit 上的异常,则也会重新抛出异常。
      • 如果没有抛出异常,则返回函数指定的值。
  • 无论如何,无论是因异常终止还是返回,哨兵的析构函数都会在此函数离开之前被调用。

标准库

以下标准库函数是 UnformattedOutputFunctions (非格式化输出函数)

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 63C++98缺少异常处理策略已添加
LWG 160C++98确定捕获到的异常是否被重新抛出的过程提到了一个不存在的函数 exception()。已更正为 exceptions()。
LWG 165C++98rdbuf() 上唯一允许调用的虚成员是 overflow()也允许 xsputn() 和 sync()

C++ 命名需求: UnformattedOutputFunction (非格式化输出函数)

要求

一个 UnformattedOutputFunction (非格式化输出函数) 是一个执行以下操作的流输出函数:

  • 构造一个类型为 basic_istream::sentry 的对象,该对象具有自动存储期,并且 noskipws 参数设置为 true,执行以下操作:

    • 如果输出流上设置了 eofbitbadbit,则也设置 failbit,并且如果此输出流的 异常掩码 ((exceptions() & failbit) != 0) 启用了 failbit 上的异常,则抛出 ios_base::failure
    • 如果适用,刷新 tie() 的输出流。
  • 通过调用 sentry::operator bool() 检查哨兵的状态,这等同于 basic_ios::good

    • 如果操作符返回 false 或 sentry 的构造函数抛出异常,则不发生输出。
    • 如果操作符返回 true,则尝试通过将字符插入输出流来执行所需的输出,就像调用 rdbuf()->sputc() 一样。std::basic_ostream 的其他公共成员也可以使用,但 rdbuf() 的虚成员(除了 overflow()xsputn()sync())将永远不会被调用。
      • 如果在输出期间抛出异常,则在输出流中设置 badbit。如果此流的 异常掩码 ((exceptions() & failbit) != 0) 启用了 badbit 上的异常,则也会重新抛出异常。
      • 如果没有抛出异常,则返回函数指定的值。
  • 无论如何,无论是因异常终止还是返回,哨兵的析构函数都会在此函数离开之前被调用。

标准库

以下标准库函数是 UnformattedOutputFunctions (非格式化输出函数)

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 63C++98缺少异常处理策略已添加
LWG 160C++98确定捕获到的异常是否被重新抛出的过程提到了一个不存在的函数 exception()。已更正为 exceptions()。
LWG 165C++98rdbuf() 上唯一允许调用的虚成员是 overflow()也允许 xsputn() 和 sync()