命名空间
变体
操作

operator>>(std::basic_istream)

来自 cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
在头文件 <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(除了 eofbit,它按 FormattedInputFunction 的要求设置)。
2) 行为如同 FormattedInputFunction。 在构造并检查哨兵对象后,它可能会跳过前导空白,提取连续的字符并将它们存储到 一个以 s 指向的第一个元素为起始的字符数组(直到 C++20) 的连续位置中。 提取操作将在满足以下任一条件时停止
  • 找到一个空白字符(由 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>>提取最后一个整数,但此行为与std::scanf使用"%c"格式说明符的行为一致。

[编辑] 参数

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; // 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 右值流的重载没有约束 约束

[编辑] 参见

提取格式化的数据
(公有成员函数) [编辑]