C++ 命名要求: FormattedInputFunction
来自 cppreference.cn
[编辑] 要求
FormattedInputFunction 是一种流输入函数,它执行以下操作:
- 构造一个具有自动存储期的 basic_istream::sentry 类型对象,其中
noskipws
参数设置为 false,该对象执行以下操作:
- 如果输入流上设置了 eofbit 或 badbit,则同时设置
failbit
,并且如果此输入流的异常掩码中启用了failbit
上的异常((exceptions() & failbit) != 0),则抛出 ios_base::failure。 - 如果适用,刷新 tie() 绑定的输出流。
- 如果在此输入流上设置了
ios_base::skipws
标志,则从输入流中提取并丢弃字符,直到以下条件之一变为真:
- 输入流上下一个可用字符不是空白字符,由当前此输入流中注入的 locale 的 std::ctype facet 测试。非空白字符未被提取。
- 到达流的末尾,在这种情况下设置
failbit
和eofbit
,并且如果流对其中一个位上的异常是开的,则抛出 ios_base::failure。
- 如果输入流上设置了 eofbit 或 badbit,则同时设置
- 通过调用
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。
- 如果到达流的末尾(调用 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 返回 Traits::eof()),则设置
- 无论如何,无论是通过异常终止还是返回,在离开此函数之前都会调用岗哨的析构函数。
[编辑] 标准库
以下标准库函数是 FormattedInputFunctions。
- basic_istream::operator>>(int, long, double, void*, bool)
- operator>>(std::basic_istream, char&)
- operator>>(std::basic_istream, char*)
- operator>>(std::basic_istream, std::bitset)
- operator>>(std::basic_istream, std::string)
-
operator>>
,当对 std::get_money 的返回值调用时
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 160 | C++98 | 确定捕获的异常是否重新抛出的过程 提到了一个不存在的函数 exception() |
更正为 exceptions() |