operator>>(std::basic_istream)
来自cppreference.com
| 在标头 <istream> 定义
|
||
| |
(1) | |
| (2) | ||
| |
(C++20 前) | |
| |
(C++20 起) | |
| |
(3) | (C++11 起) |
1,2) 进行字符输入操作。
1) 表现为有格式输入函数 (FormattedInputFunction) 。在构造并检查 sentry 对象(可能跳过前导空白符)后,提取一个字符并将它存储到
ch。如果没有字符可用,那么设置 failbit(在有格式输入函数 (FormattedInputFunction) 所要求的设置 eofbit 外)。2) 表现为有格式输入函数 (FormattedInputFunction) 。在构造并检查 sentry 对象(可能跳过前导空白符)后,提取后续字符,并将它们存储到
s 指向其首元素的字符数组(C++20 前)的相继位置。满足下列任意条件时停止提取:
- 找到了空白字符(以 ctype<CharT> 刻面确定)。不提取该空白字符。
|
(C++20 前) |
|
(C++20 起) |
- 输入序列中出现文件尾(也会设置 eofbit)。
CharT() 存储到输出结尾。如果没有提取任何字符,那么就会设置 failbit(仍写入空字符到输出的首位置)。最后调用 st.width(0) 取消 std::setw 的效果,如果存在。3) 给定到输入流对象的右值引用,调用适合的提取运算符(等价于
st >> std::forward<T>(value))。此重载只有在表达式 st >> std::forward<T>(value) 良构且 Istream 是公开且无歧义派生自 std::ios_base 的类类型时才会参与重载决议。注解
提取作为流的最后一个字符的单个字符不会设置 eofbit:这与其他有格式输入函数不同,例如以 operator>> 提取最后的整数,但此行为匹配 std::scanf 用 "%c" 格式指定符的行为。
参数
| st | - | 要被提取数据的输入流 |
| ch | - | 用来存储提取出的字符的到字符的引用 |
| s | - | 指针,指向(C++20 前)用来存储提取出的字符的字符数组 |
返回值
1,2)
st3)
std::move(st)示例
运行此代码
#include <iomanip>
#include <iostream>
#include <sstream>
int main()
{
std::string input = "n greetings";
std::istringstream stream(input);
char c;
const int MAX = 6;
char cstr[MAX];
stream >> c >> std::setw(MAX) >> cstr;
std::cout << "c = " << c << '\n'
<< "cstr = " << cstr << '\n';
double f;
std::istringstream("1.23") >> f; // 从右值流提取
std::cout << "f = " << f << '\n';
}
输出:
c = n
cstr = greet
f = 1.23
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 13 | C++98 | n 的定义提到了不存在的名字 eos
|
改成 CharT()
|
| LWG 68 | C++98 | 重载 (2) 不会将空字符存储到输出的末尾 | 存储一个空字符 |
| LWG 1203 | C++11 | 右值流的重载返回到基类的左值引用 | 返回到派生类的右值引用 |
| LWG 2328 | C++11 | 右值流的重载要求另一参数是左值 | 使之接受右值 |
| LWG 2534 | C++11 | 右值流的重没有被制约 | 已制约 |
参阅
| 提取带格式数据 (公开成员函数) |