命名空间
变体
操作

C++ 命名需求: FormattedInputFunction

来自 cppreference.com
 
 
C++ 命名需求
 

[编辑] 需求

一个 FormattedInputFunction 是一个执行以下操作的流输入函数

  • 构造一个类型为 basic_istream::sentry 的对象,具有自动存储持续时间,并且 noskipws 参数设置为 false,执行以下操作
  • 如果 eofbitbadbit 在输入流上设置,也设置 failbit,并且如果此输入流的 异常掩码 ((exceptions() & failbit) != 0) 中启用了 failbit 上的异常,则抛出 ios_base::failure.
  • 刷新绑定的输出流(如果适用)。
  • 如果 ios_base::skipws 标志在此输入流上设置,则从输入流中提取并丢弃字符,直到以下之一变为真
  • 输入流上的下一个可用字符不是空格字符,如当前在此输入流中注入的语言环境的 std::ctype 面通过测试。非空格字符不会被提取。
  • 到达流的末尾,在这种情况下,将设置 failbiteofbit,并且如果流打开以针对其中一个位进行异常,则抛出 ios_base::failure.
  • 通过调用 sentry::operator bool() 检查哨兵的状态,这等效于 basic_ios::good.
  • 如果哨兵返回 false 或哨兵的构造函数抛出异常,则不会进行输入。
  • 如果哨兵返回 true,则执行输入,就好像通过调用 rdbuf()->sbumpc()rdbuf()->sgetc() 一样。
  • 如果到达流的末尾(对 rdbuf()->sbumpc()rdbuf()->sgetc() 的调用返回 Traits::eof()),则设置 eofbit。如果在此流的 异常掩码 ((exceptions() & eofbit) != 0) 中启用了 eofbit 上的异常,则抛出 ios_base::failure.
  • 如果在输入期间抛出异常,则在输入流中设置 badbit。如果在此流的 异常掩码 ((exceptions() & badbit) != 0) 中启用了 badbit 上的异常,则也会重新抛出异常。
  • 如果没有抛出异常,则返回 *this.
  • 无论如何,无论是通过异常终止还是返回,在离开此函数之前都会调用哨兵的析构函数。

[编辑] 标准库

以下标准库函数是 FormattedInputFunctions

[编辑] 缺陷报告

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

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