public member function
<istream> <iostream>

std::operator>> (basic_istream)

單個字元 (1)
template<class charT, class traits>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>& is, charT& c);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  signed char& c);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  unsigned char& c);
character sequence (2)
template<class charT, class traits>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>& is, charT* s);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  signed char* s);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  unsigned char* s);
單個字元 (1)
template<class charT, class traits>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>& is, charT& c);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  signed char& c);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  unsigned char& c);
character sequence (2)
template<class charT, class traits>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>& is, charT* s);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  signed char* s);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  unsigned char* s);
rvalue extraction (3)
template<class charT, class traits, class T>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>&& is, T& val);
Extract characters
此運算子(>>)應用於輸入流時,稱為提取運算子,執行格式化輸入

(1) single character
is 中提取下一個字元,並將其儲存為 c 的值。
(2) character sequence
is 中提取字元,並將它們作為 c 字串儲存在 s 中,一旦遇到空白字元或提取了 (width()-1) 個字元(如果 width 不為零)就會停止。
一個空字元charT())會自動追加到寫入的序列中。
然後,該函式將 width 重置為零。
(3) rvalue extraction
允許從 rvalue basic_istream 物件中提取,效果與從 lvalue 中提取相同:它實際上呼叫:is>>val

在內部,該函式透過首先使用 noskipws 設定為 false 來構造一個 sentry 來訪問 is 的輸入序列:這可能會重新整理繫結的流和/或丟棄前導空白(請參閱 basic_istream::sentry)。然後(如果 good),它從 is 的關聯流緩衝區物件中提取字元(如同呼叫其成員函式 sbumpcsgetc),最後銷燬 sentry 物件後返回。

請注意,如果此函式在提取單個字元(1)時提取了流的最後一個字元,它不會設定其 eofbit 標誌,但嘗試在其之後提取會這樣做。

呼叫此函式不會改變 isgcount 的返回值。

引數

的 C++ 等效檔案是
從中提取字元的輸入流物件。
c
儲存提取字元的物件。
s
指向字元陣列的指標,提取的字元將作為 c 字串儲存在其中。
is 的成員函式 width 可用於指定要寫入的字元數限制。
val
儲存內容的此物件。
T 應為受此函式或 is 的成員函式 operator>> 支援的右側引數型別。
charTtraitsis 的類模板引數(請參閱 basic_istream)。

返回值

basic_istream 物件(is)。

提取的值或序列不會被返回,而是直接儲存在作為引數傳遞的變數中。

錯誤透過修改內部狀態標誌來發出訊號。
flagerror
eofbit該函式停止提取字元,因為由 is 控制的輸入序列已無更多可用字元(已到達檔案尾)。
failbit要麼沒有提取字元,要麼無法將它們解釋為相應型別的有效值。
badbit流錯誤(例如,當此函式捕獲由內部操作丟擲的異常時)。
當設定此標誌時,流的完整性可能受到影響。
一次操作可能會設定多個標誌。

如果操作設定了已在 is 的成員 exceptions 中註冊的內部狀態標誌,則該函式將丟擲 isfailure 成員型別的異常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
// example on extraction
#include <iostream>     // std::cin, std::cout

int main () {
  char str[10];

  std::cout << "Enter a word: ";
  std::cin.width (10);               // limit width
  std::cin >> str;
  std::cout << "The first 9 chars of your word are: " << str << '\n';

  return 0;
}

此示例演示了使用標準 basic_istream 物件 cin 來使用上面顯示的某些過載 operator>> 函式。

資料競爭

修改 cs 指向的陣列的元素。
修改 is
併發訪問同一流物件可能導致資料競爭,標準流物件 cinwcin 在這些物件與 stdio 同步時除外(在這種情況下,不會引發資料競爭,儘管對於提取字元歸因於執行緒的順序沒有保證)。

異常安全

基本保證:如果丟擲異常,所有涉及的物件都處於有效狀態。
如果 is 的結果錯誤狀態標誌不是 goodbit 並且 is 的成員 exceptions 被設定為對該狀態丟擲,則它會丟擲 failure 成員型別的異常。
任何由內部操作丟擲的異常都會被函式捕獲和處理,設定 isbadbit 標誌。如果 badbitis 上對 exceptions 的最後一次呼叫中被設定,則該函式會重新丟擲捕獲到的異常。

另見