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 。