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) 。在构造并检查 sentry 对象,因而可能跳过前导空白符后,释出一个字符并存储之到 ch。若无字符可用,则设置 failbit (在有格式输入函数 (FormattedInputFunction) 所要求的设置 eofbit 外)。
2) 表现为有格式输入函数 (FormattedInputFunction) 。在构造并检查 sentry 对象,因而可能跳过前导空白后,释出相继字符,并存储它们到 s 指向其首元素的字符数组 (C++20 前)的相继位置。若满足下列条件之一,则释出停止:
  • 找到空白字符(以 ctype<CharT> 平面确定)。不释出该空白字符。
  • 释出了 st.width() - 1 个字符(若 st.width() 大于零)
(C++20 前)
  • 释出了 min(std::size_t(st.width()), N)  - 1 个字符(若 st.width() 大于零)
  • 否则为释出了 N - 1 个字符
(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 前)要存储释出字符的字符数组

返回值

st

示例

#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++ 标准。

DR 应用于 出版时的行为 正确行为
LWG 1203 C++11 右值流的重载返回到基类的左值引用 返回到派生类的右值引用
LWG 2328 C++11 右值流的重载要求另一参数为左值 使之接受右值
LWG 2534 C++11 右值流的重载未被制约 已制约

参阅

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