Namespaces
Variants

C++ named requirements: FormattedInputFunction

From cppreference.net
C++ named requirements

要求

一个 格式化输入函数 是执行以下操作的流输入函数:

  • 构造一个具有自动存储期且 noskipws 参数设为 false basic_istream::sentry 类型对象,该操作执行以下步骤:
  • 如果输入流上的 eofbit badbit 被设置,则同时设置 failbit 。若此输入流的 异常掩码 中启用了对 failbit 的异常( ( exceptions ( ) & failbit ) ! = 0 ),则抛出 ios_base::failure
  • 刷新关联的 tie() 输出流(若存在)。
  • 若此输入流设置了 ios_base::skipws 标志,则从输入流提取并丢弃字符,直到满足以下任一条件:
  • 输入流中下一个可用字符不是空白字符(由当前输入流所植入区域设置的 std::ctype 面进行检测)。该非空白字符不会被提取。
  • 到达流末尾,此时将设置 failbit eofbit 。若流启用了这些位的异常,则抛出 ios_base::failure
  • 通过调用 sentry::operator bool() 检查岗哨状态,该操作等效于 basic_ios::good
  • 若岗哨返回 false 或其构造函数抛出异常,则不执行输入操作。
  • 若岗哨返回 true ,则执行输入操作,具体实现方式类似于调用 rdbuf ( ) - > sbumpc ( ) rdbuf ( ) - > sgetc ( )
  • 如果到达流末尾(调用 rdbuf ( ) - > sbumpc ( ) rdbuf ( ) - > sgetc ( ) 返回 Traits :: eof ( ) ),则设置 eofbit 。如果此流的 异常掩码 中启用了 eofbit 异常( ( exceptions ( ) & eofbit ) ! = 0 ),则抛出 ios_base::failure
  • 如果在输入过程中抛出异常,则在输入流中设置 badbit 。如果此流的 异常掩码 中启用了 badbit 异常( ( exceptions ( ) & badbit ) ! = 0 ),则同时重新抛出该异常。
  • 如果未抛出异常,则返回 * this
  • 在任何情况下,无论是因异常终止还是正常返回,哨兵对象的析构函数都会在离开此函数前被调用。

标准库

以下标准库函数是 FormattedInputFunction s

缺陷报告

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

DR 适用范围 发布时的行为 正确行为
LWG 160 C++98 判断捕获的异常是否被重新抛出的过程
提及了不存在的函数 exception()
修正为 exceptions()