名稱空間
變體
操作

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。在構造並檢查哨兵物件(可能會跳過開頭的空白字元)後,提取連續字元並將其儲存到字元陣列的連續位置,該陣列的第一個元素由(C++20 前) s 指向。當滿足以下任何條件時,提取停止:
  • 找到空白字元(由 ctype<CharT> facet 決定)。空白字元不被提取。
  • 如果 st.width() 大於零,則儲存 st.width() - 1 個字元。
(C++20 前)
  • 儲存了 n - 1 個字元,其中 n 定義如下:
  • 如果 st.width() 大於零,則為 std::min(std::size_t(st.width()), N)
  • 否則,nN
(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++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 13 C++98 n 的定義提及了不存在的名稱 eos 替換為 CharT()
LWG 68 C++98 過載 (2) 的輸出末尾未儲存空字元 儲存一個空字元
LWG 1203 C++98 右值流的過載返回了基類的左值引用 返回右值引用
到派生類
LWG 2328 C++98 右值流的過載要求另一個引數為左值 改為接受右值
LWG 2534 C++98 右值流的過載未受約束 已受約束

[編輯] 參閱

提取格式化資料
(公有成員函式) [編輯]