Namespaces
Variants

operator>> (std::basic_istream)

From 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)
(2)
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 ) ;
(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 (此外还会按 FormattedInputFunction 的要求设置 eofbit )。
2) 表现为 格式化输入函数 。构造并检查哨兵对象后(可能会跳过前导空白字符),提取连续字符并将其存储到 (C++20 前) s 指向首元素的字符数组的连续位置中。满足以下任一条件时停止提取:
  • 遇到空白字符(由 ctype<CharT> 特性确定)。该空白字符不会被提取。
  • st. width ( ) 大于零,则存储 st. width ( ) - 1 个字符。
(C++20 前)
  • 存储 n - 1 个字符,其中 n 定义如下:
(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 右值流重载未受约束 添加约束

参见

提取格式化数据
(公开成员函数)