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
指向首元素的字符数组的连续位置中。满足以下任一条件时停止提取:
- 遇到空白字符(由 ctype<CharT> 特性确定)。该空白字符不会被提取。
|
(C++20 前) |
|
(C++20 起) |
- 输入序列中出现文件结尾(此时还会设置 eofbit )。
Istream
是公开明确继承自
std::ios_base
的类类型时,才参与重载决议。
目录 |
注释
提取流中最后一个字符的单个字符不会设置
eofbit
:这与其他格式化输入函数不同,例如使用
operator
>>
提取最后一个整数时的情况,但此行为与使用
"%c"
格式说明符的
std::scanf
行为一致。
参数
| 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; // 右值流提取 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++98 | 右值流重载返回基类左值引用 | 返回派生类右值引用 |
| LWG 2328 | C++98 | 右值流重载要求其他参数为左值 | 改为接受右值 |
| LWG 2534 | C++98 | 右值流重载未受约束 | 添加约束 |
参见
|
提取格式化数据
(公开成员函数) |