C++ named requirements: FormattedInputFunction
From cppreference.net
要求
一个 格式化输入函数 是执行以下操作的流输入函数:
-
构造一个具有自动存储期且
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 。
-
如果输入流上的
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
(
)
),则设置
- 在任何情况下,无论是因异常终止还是正常返回,哨兵对象的析构函数都会在离开此函数前被调用。
标准库
以下标准库函数是 FormattedInputFunction s 。
- 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)
-
对
std::get_money
返回值调用
operator>>
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 160 | C++98 |
判断捕获的异常是否被重新抛出的过程
提及了不存在的函数
exception()
|
修正为 exceptions() |