命名空间
变体
操作

C++ 命名要求: FormattedInputFunction

来自 cppreference.cn
 
 
C++ 命名要求
 

[编辑] 要求

FormattedInputFunction 是一个流输入函数,它执行以下操作:

  • 构造一个具有自动存储持续时间且 noskipws 参数设置为 falsebasic_istream::sentry 类型的对象,该对象执行以下操作:
  • 如果输入流上设置了 eofbitbadbit,则也设置 failbit,并且如果在此输入流的 异常掩码 中启用了 failbit 上的异常 ((exceptions() & failbit) != 0),则抛出 ios_base::failure
  • 刷新所有关联的输出流(如果适用)。
  • 如果在此输入流上设置了 ios_base::skipws 标志,则从输入流中提取并丢弃字符,直到以下条件之一为真:
  • 输入流上的下一个可用字符不是空白字符,由当前嵌入到此输入流中的区域设置的 std::ctype facet 测试。非空白字符不会被提取。
  • 到达流的末尾,在这种情况下,设置 failbiteofbit,并且如果流已为此位之一启用异常,则抛出 ios_base::failure
  • 通过调用 sentry::operator bool() 检查 sentry 的状态,这等效于 basic_ios::good
  • 如果 sentry 返回 false 或 sentry 的构造函数抛出异常,则不进行任何输入。
  • 如果 sentry 返回 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
  • 在任何情况下,无论是因异常终止还是返回,sentry 的析构函数都会在本函数退出之前被调用。

[编辑] 标准库

以下标准库函数是 FormattedInputFunction

[编辑] 缺陷报告

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

DR 应用于 已发布行为 正确行为
LWG 160 C++98 确定捕获的异常是否被重新抛出的过程
提到了一个不存在的函数 exception()
更正为 exceptions()