C++ 具名要求:有格式输入函数 (FormattedInputFunction)
来自cppreference.com
要求
有格式输入函数 (FormattedInputFunction) 是进行下列操作的流输入函数:
- 构造一个具有自动存储期的 basic_istream::sentry 类型的对象,并将
noskipws
实参设为 false,这导致进行下列操作
- 若输入流上设置了 eofbit 或 badbit,则一同设置
failbit
,且若此输入流的异常掩码中启用了 failbit 上的异常,则抛出 ios_base::failure。 - 冲洗其所 tie() 的输出流,若适用
- 若此输入流上设置了
ios_base::skipws
标志,则提取并舍弃来自输入流的字符,直至下列之一为真:
- 输入流上的下个可用字符不是空白字符(以此输入流中当前浸染的本地环境的 std::ctype 刻面进行测试)。不提取非空白字符。
- 抵达流尾,该情况下设置
failbit
和eofbit
,而且若该流开启了这些位之一上的异常,则抛出 ios_base::failure。
- 若输入流上设置了 eofbit 或 badbit,则一同设置
- 通过调用
sentry::operator bool()
检查 sentry 的状态,这等价于 basic_ios::good。 - 若 sentry 返回 false 或 sentry 的构造函数抛异常,则不发生输入。
- 若 sentry 返回 true,则如同通过调用 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 一样进行输入。
- 若抵达流尾(对 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 的调用返回 Traits::eof()),则设置
eofbit
。若此流的异常掩码中启用了 eofbit 上的异常,则抛出 ios_base::failure。 - 若在输入期间抛出了异常,则在输入流中设置
badbit
。若此流的异常掩码中启用了 badbit 上的异常,则重抛这个异常。 - 若未抛出任何异常,则返回 *this。
- 若抵达流尾(对 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 的调用返回 Traits::eof()),则设置
- 任何事件中,无论是因异常终止还是返回,离开此函数前都会调用 sentry 的析构函数。
标准库
下列标准库函数是有格式输入函数 (FormattedInputFunction) 。