命名空间
变体
操作

C++ 命名要求: UnformattedInputFunction

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

[编辑] 要求

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

1) 使用自动存储持续时间构造一个 basic_istream::sentry 类型的对象,并将 noskipws 参数设置为 true,这将执行以下操作
  • 如果 eofbitbadbit 在输入流上设置,则也设置 failbit,如果在这个输入流的 异常掩码 ((exceptions() & failbit) != 0) 中启用了 failbit 上的异常,则抛出 ios_base::failure.
  • 刷新与 tie() 绑定的输出流(如果适用)。
2) 通过调用 sentry::operator bool() 检查哨兵的状态,这等效于 basic_ios::good.
  • 如果运算符返回 false 或哨兵的构造函数抛出异常
  • 将输入流中提取的字符数 (gcount) 设置为零。
  • 如果调用该函数是为了写入 CharT 数组,则将 CharT()(空字符)写入数组的第一个位置。
  • 如果运算符返回 true,则执行输入,就好像通过调用 rdbuf()->sbumpc()rdbuf()->sgetc() 一样。
  • 如果达到流的末尾(对 rdbuf()->sbumpc()rdbuf()->sgetc() 的调用返回 Traits::eof()),则设置 eofbit。如果在这个流的 异常掩码 ((exceptions() & eofbit) != 0) 中启用了 eofbit 上的异常,则抛出 ios_base::failure.
  • 如果在输入期间抛出异常,则在输入流中设置 badbit。如果在这个流的 异常掩码 ((exceptions() & badbit) != 0) 中启用了 badbit 上的异常,则也会重新抛出该异常。
  • 如果在输入期间没有抛出异常,则设置输入流中提取的字符数 (gcount)。
3) 无论是通过异常终止还是返回,哨兵的析构函数都将在离开此函数之前被调用。

[编辑] 标准库

以下标准库函数是 UnformattedInputFunctions

[编辑] 缺陷报告

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

DR 应用于 已发布的行为 正确行为
LWG 61 C++98 不清楚由于
设置 eofbit 和/或 failbit 是否会导致设置 badbit
basic_ios::clear 抛出的异常
不会被捕获或重新抛出
LWG 160 C++98 确定是否重新抛出捕获的异常的过程
提到了一个不存在的函数 exception()
更正为 exceptions()
LWG 243 C++98 sentry::operator bool() 返回 false
或哨兵对象无法构造时,行为未指定
已指定