operator>>(std::basic_istream)
来自 zh.cppreference.net
| 定义于头文件 <istream>
|
||
template< class CharT, class Traits >
basic_istream<CharT, Traits>&
operator>>( basic_istream<CharT, Traits>& st, CharT& ch );
template< class Traits >
basic_istream<char, Traits>&
operator>>( basic_istream<char, Traits>& st, signed char& ch );
template< class Traits >
basic_istream<char, Traits>&
operator>>( basic_istream<char, Traits>& st, unsigned char& ch );
|
(1) | |
template< class CharT, class Traits>
basic_istream<CharT, Traits>&
operator>>( basic_istream<CharT, Traits>& st, CharT* s );
template< class Traits >
basic_istream<char, Traits>&
operator>>( basic_istream<char, Traits>& st, signed char* s );
template< class Traits >
basic_istream<char, Traits>&
operator>>( basic_istream<char, Traits>& st, unsigned char* s );
|
(2) | (C++20 前) |
template< class CharT, class Traits, std::size_t N >
basic_istream<CharT, Traits>&
operator>>( basic_istream<CharT, Traits>& st, CharT (&s)[N] );
template< class Traits, std::size_t N >
basic_istream<char, Traits>&
operator>>( basic_istream<char, Traits>& st, signed char (&s)[N] );
template< class Traits, std::size_t N >
basic_istream<char, Traits>&
operator>>( basic_istream<char, Traits>& st, unsigned char (&s)[N] );
|
(C++20 起) | |
template< class Istream, class T >
Istream&&
operator>>( Istream&& st, T&& value );
|
(3) | (C++11 起) |
1,2) 执行字符输入操作。
1) 表现为一个 FormattedInputFunction。构建并检查哨兵对象(可能跳过前导空白)后,提取一个字符并存储到
ch。如果没有字符可用,则设置 failbit (同时设置 eofbit,这是 FormattedInputFunction 所要求的)。2) 表现为一个 FormattedInputFunction。构建并检查哨兵对象(可能跳过前导空白)后,提取连续的字符并存储到 一个由 (C++20 前)
s 指向第一元素的字符数组的连续位置。提取在满足以下任意条件时停止:
- 找到空白字符(由 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
>>
提取最后一个整数时的情况,但此行为与使用
"%c"
格式说明符的
std::scanf
行为一致。
参数
| st | - | 用于提取数据的输入流 |
| ch | - | 用于存储提取字符的字符引用 |
| s | - | 指向 (直至 C++20) 用于存储提取字符的字符数组 |
返回值
1,2)
st
3)
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++98 | 右值流重载返回基类左值引用 | 返回派生类右值引用 |
| LWG 2328 | C++98 | 右值流重载要求其他参数为左值 | 改为接受右值 |
| LWG 2534 | C++98 | 右值流重载未受约束 | 添加约束 |
参见
|
提取格式化数据
(公开成员函数) |