std::basic_istream<CharT,Traits>::get
来自 cppreference.cn
< cpp | io | basic istream
int_type get(); |
(1) | |
basic_istream& get( char_type& ch ); |
(2) | |
basic_istream& get( char_type* s, std::streamsize count ); |
(3) | |
basic_istream& get( char_type* s, std::streamsize count, char_type delim ); |
(4) | |
basic_istream& get( basic_streambuf& strbuf ); |
(5) | |
basic_istream& get( basic_streambuf& strbuf, char_type delim ); |
(6) | |
从流中提取字符或多个字符。
所有版本均表现为 UnformattedInputFunction。在构造和检查 sentry 对象之后,这些函数执行以下操作
2) 读取一个字符,如果可用则将其存储到 ch 中。否则,保持 ch 不修改并设置 failbit 和 eofbit。请注意,与格式化字符输入运算符>>不同,此函数未在 signed char 和 unsigned char 类型上重载。
4) 读取字符并将它们存储到字符数组的连续位置,该数组的第一个元素由 s 指向。提取和存储字符直到发生以下任何一种情况
- count 小于 1 或已存储 count - 1 个字符。
- 文件结束条件发生在输入序列中(调用 setstate(eofbit))。
- 下一个可用的输入字符 c 等于 delim,由 Traits::eq(c, delim) 确定。此字符不会被提取(与
getline()
不同)。
在任何情况下,如果 count > 0,则空字符 (CharT()) 存储在数组的下一个连续位置。
6) 读取字符并将它们插入到由给定的 basic_streambuf 对象控制的输出序列中。提取字符并插入到 strbuf 中,直到发生以下任何一种情况
- 输入序列中发生文件结束条件。
- 插入到输出序列失败(在这种情况下,无法插入的字符不会被提取)。
- 下一个可用的输入字符 c 等于 delim,由 Traits::eq(c, delim) 确定。此字符不会被提取。
- 发生异常(在这种情况下,异常被捕获且不会重新抛出)。
如果没有提取任何字符,则调用 setstate(failbit)。
所有版本都将 gcount() 的值设置为提取的字符数。
目录 |
[编辑] 参数
ch | - | 写入结果字符的引用 |
s | - | 指向用于存储字符的字符串的指针 |
count | - | s 指向的字符串的大小 |
delim | - | 用于停止提取的分隔符字符。它不会被提取也不会被存储 |
strbuf | - | 用于读取内容的流缓冲区 |
[编辑] 返回值
1) 提取的字符或 Traits::eof()。
2-6) *this
[编辑] 异常
如果内部操作抛出异常,则会被捕获并设置 badbit。如果 exceptions() 针对 badbit
设置,则会重新抛出该异常。
[编辑] 示例
运行此代码
#include <iostream> #include <sstream> int main() { std::istringstream s1("Hello, world."); char c1 = s1.get(); // reads 'H' std::cout << "after reading " << c1 << ", gcount() == " << s1.gcount() << '\n'; char c2; s1.get(c2); // reads 'e' char str[5]; s1.get(str, 5); // reads "llo," std::cout << "after reading " << str << ", gcount() == " << s1.gcount() << '\n'; std::cout << c1 << c2 << str; s1.get(*std::cout.rdbuf()); // reads the rest, not including '\n' std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n'; }
输出
after reading H, gcount() == 1 after reading llo,, gcount() == 4 Hello, world. After the last get(), gcount() == 7
[编辑] 缺陷报告
以下行为变更缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 370 | C++98 | 重载 (5) 的效果是 get(s, count, widen('\n')), 这与重载 (3) 的效果相同 |
更正为 get(strbuf, widen('\n')) |
LWG 531 | C++98 | 重载 (3,4) 无法处理 count 为非正数的情况 |
没有字符被 在这种情况下提取 |
[编辑] 参见
提取字符块 (公共成员函数) | |
提取格式化数据 (公共成员函数) | |
提取字符和字符数组 (函数模板) |