C++ 具名要求:无格式输入函数 (UnformattedInputFunction)
来自cppreference.com
要求
无格式输入函数 (UnformattedInputFunction) 是进行下列操作的流输入函数:
- 构造具有自动存储期的 basic_istream::sentry 类型的对象,并将
noskipws
实参设为 true,这会进行下列操作
- 若 eofbit 或 badbit 在输入流上被设置,则一并设置
failbit
,且若此输入流的异常掩码中启用了 failbit 上的异常,则抛出 ios_base::failure。 - 冲洗其所 tie() 的输出流,若适用
- 若 eofbit 或 badbit 在输入流上被设置,则一并设置
- 通过调用
sentry::operator bool()
检查 sentry 的状态,这等价于 basic_ios::good。 - 若 sentry 返回 false 或 sentry 的构造函数抛异常,则:
- 设置输入流中的已提取字符数 (gcount) 为零
- 若是为写入某个
CharT
的数组而进行函数调用,则向该数组的首个位置写入CharT()
(空字符)
- 若 sentry 返回 true,则如同以调用 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 来实施输入。
- 若抵达了流尾(对 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 的调用返回 Traits::eof()),则设置
eofbit
。若此流的异常掩码中启用了 eofbit 上的异常,则抛出 ios_base::failure。 - 若输入过程中抛出了异常,则设置输入流中的
badbit
。若此流的异常掩码中启用了 badbit 上的异常,则还要重抛这个异常。 - 若输入过程中未抛出异常,则设置输入流中的已提取字符数 (gcount)。
- 若抵达了流尾(对 rdbuf()->sbumpc() 或 rdbuf()->sgetc() 的调用返回 Traits::eof()),则设置
- 任何事件中,无论是异常终止还是返回,离开此函数前都会调用 sentry 的析构函数。
标准库
下列标准库函数是无格式输入函数 (UnformattedInputFunction) 。
- std::getline,但它不修改 gcount。
- basic_istream::operator>>(basic_streambuf*)
- basic_istream::get
- basic_istream::getline
- basic_istream::ignore
- basic_istream::peek
- basic_istream::read
- basic_istream::readsome
- basic_istream::putback,除了首先清除
eofbit
- basic_istream::unget,除了首先清除
eofbit
- basic_istream::sync,除了不修改 gcount
- basic_istream::tellg,除了不修改 gcount
- basic_istream::seekg,除了首先清除
eofbit
且不修改 gcount - std::ws ,除了不修改 gcount 。