operator>>(std::basic_istream)
在头文件 <istream> 中定义 |
||
template< class CharT, class Traits > basic_istream<CharT, Traits>& |
(1) | |
(2) | ||
template< class CharT, class Traits> basic_istream<CharT, Traits>& |
(直到 C++20) | |
template< class CharT, class Traits, std::size_t N > basic_istream<CharT, Traits>& |
(自 C++20 起) | |
template< class Istream, class T > Istream&& |
(3) | (自 C++11 起) |
ch
中。 如果没有可用的字符,则设置 failbit(除了 eofbit,它按 FormattedInputFunction 的要求设置)。s
指向的第一个元素为起始的字符数组(直到 C++20) 的连续位置中。 提取操作将在满足以下任一条件时停止- 找到一个空白字符(由 ctype<CharT> 面确定)。 空白字符不会被提取。
|
(直到 C++20) |
|
(自 C++20 起) |
- 在输入序列中发生文件结束(这也设置了 eofbit)。
Istream
是公开且明确地从 std::ios_base 派生的类类型时,此重载才会参与重载解析。内容 |
[编辑] 注释
提取流中最后一个字符的单个字符不会设置eofbit
:这与其他格式化的输入函数不同,例如使用operator>>提取最后一个整数,但此行为与std::scanf使用"%c"格式说明符的行为一致。
[编辑] 参数
st | - | 要从中提取数据的输入流 |
ch | - | 对存储提取的字符的字符的引用 |
s | - | 指向(直到 C++20)用于存储提取的字符的字符数组 |
[编辑] 返回值
[编辑] 示例
#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; // rvalue stream extraction std::cout << "f = " << f << '\n'; }
输出
c = n cstr = greet f = 1.23
[编辑] 缺陷报告
以下行为更改的缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 13 | C++98 | 的定义n提到了一个不存在的名称eos | 替换为CharT() |
LWG 68 | C++98 | 对于重载 (2),在输出的末尾没有存储空字符 | 存储一个空字符 |
LWG 1203 | C++98 | 右值流的重载返回对基类的左值引用 | 返回右值引用 到派生类 |
LWG 2328 | C++98 | 右值流的重载要求另一个参数为左值 | 改为接受右值 |
LWG 2534 | C++98 | 右值流的重载没有约束 | 约束 |
[编辑] 参见
提取格式化的数据 (公有成员函数) |