std::basic_istream<CharT,Traits>::get
< 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 重载,不同于有格式字符输入 operator>> 。3) 同 get(s, count, widen('\n')) ,即读取至多 count-1 个字符并存储它们到
s
所指向的字符串中,直至找到 '\n' 。4) 读取字符并存储它们到首元素为
s
所指向的字符数组的相继位置。释出并存储字符,直至出现任何下列条件:- 已存储 count - 1 个字符
- 输入序列中出现文件尾条件(调用 setstate(eofbit) )
- 下个可用输入字符
c
等于delim
,以 Traits::eq(c, delim) 确定。不释出此字符(不同于 basic_istream::getline() )。
- 下个可用输入字符
若未释出字符,则调用 setstate(failbit) 。任何情况下,若
count>0
,则存储空字符( CharT() )于数组的下个相继位置。- 输入序列中出现文件尾条件
- 插入输出序列失败(该情况下不释出无法插入的字符)
- 下个可用输入字符
c
等于delim
,以 Traits::eq(c, delim) 确定。不释出此字符。
- 下个可用输入字符
- 出现异常(该情况下捕获而不重抛异常)。
若未释出字符,则调用 setstate(failbit) 。
所有版本都设置 gcount() 的值为释出的字符数。
参数
ch | - | 到要写入结果到的字符的引用 |
s | - | 指向要存储结果到的字符串的指针 |
count | - | s 所指向的字符串的大小
|
delim | - | 用以停止释出的分隔字符。不释出且不存储它。 |
strbuf | - | 要读取内容到的流缓冲 |
返回值
1) 释出的字符或 Traits::eof()
2-6) *this
异常
若内部操作抛出异常,则捕获它并设置 badbit 。若对 badbit
设置了 exceptions() ,则重抛该异常。
示例
运行此代码
#include <sstream> #include <iostream> int main() { std::istringstream s1("Hello, world."); char c1 = s1.get(); // 读取'H' std::cout << "after reading " << c1 << ", gcount() == " << s1.gcount() << '\n'; char c2; s1.get(c2); // 读取 'e' char str[5]; s1.get(str, 5); // 读取 "llo," std::cout << "after reading " << str << ", gcount() == " << s1.gcount() << '\n'; std::cout << c1 << c2 << str; s1.get(*std::cout.rdbuf()); // 读取剩余,不包括 '\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
参阅
读并取走一块字符 (公开成员函数) | |
提取带格式数据 (公开成员函数) | |
提取字符和字符数组 (函数模板) |