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 (在有格式输入函数 (FormattedInputFunction) 所要求的设置 eofbit 外)。s
指向它的首元素的字符数组 (C++20 前)的相继位置。满足下列任意条件时停止提取:
- 已经存储了 n - 1 个字符,其中 n 是能存储的最大字符数,定义如下:
- 如果 st.width() 大于零,n 是
|
(C++20 前) |
|
(C++20 起) |
- 否则 n 是
|
(C++20 前) |
|
(C++20 起) |
- 找到空白字符(以 ctype<CharT> 平面确定)。不提取该空白字符。
- 输入序列中出现文件尾(也会设置 eofbit)。
Istream
是公开且无歧义派生自 std::ios_base 的类类型时才会参与重载决议。注解
提取作为流的最后一个字符的单个字符不会设置 eofbit
:这与其他有格式输入函数不同,例如以 operator>> 提取最后的整数,但此行为匹配 std::scanf 用 "%c" 格式指定符的行为。
参数
st | - | 要被提取数据的输入流 |
ch | - | 用来存储提取出的字符的到字符的引用 |
s | - | 指针,指向 (C++20 前)用来存储提取出的字符的字符数组 |
返回值
示例
#include <iostream> #include <iomanip> #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 | 右值流的重没有被制约 | 已制约 |
参阅
提取带格式数据 (公开成员函数) |