函式
<istream> <iostream>

std::ws

用於 istream
istream& ws (istream& is);
基礎模板
template <class charT, class traits>basic_istream<charT,traits>& ws (basic_istream<charT,traits>& is);
提取空白符
從輸入序列的當前位置儘可能多地提取空白字元。提取將一直進行,直到找到一個非空白字元為止。這些提取的空白字元將被丟棄。

請注意,basic_istream 物件預設設定了 skipws 標誌:這會在格式化提取操作(請參見 operator>>)之前執行類似的效果。

此函式執行的內部操作沒有具體規範。
內部,該函式透過首先構造一個 sentry 物件(並將 noskipws 設定為 true)來訪問輸入序列 is。然後(如果 good),它會像呼叫其成員函式 sbumpcsgetc 一樣,從 is 的關聯流緩衝區物件中提取字元,最後銷燬 sentry 物件,然後返回。

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

引數

的 C++ 等效檔案是
從中提取空白符的輸入流物件。
由於此函式是一個流運算子,因此它被設計為單獨使用,不帶引數,並與輸入流的提取>>)操作結合使用(參見下面的示例)。

返回值

引數 is

錯誤透過修改 is內部狀態標誌來發出訊號。
標誌錯誤
eofbit函式停止提取字元,因為輸入序列沒有更多可用字元(已到達 檔案末尾)。
failbit在呼叫之前,is流狀態不是 good(適用於 C++11 和其他構造 sentry 物件的實現)。
badbit流錯誤(例如,當此函式捕獲由內部操作丟擲的異常時)。
當設定此標誌時,流的完整性可能受到影響。
單個操作可能在 is 上設定多個標誌。

如果操作設定了 is內部狀態標誌,並且該標誌已透過其成員 exceptions 進行了註冊,則該函式將丟擲成員型別為 failure 的異常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ws manipulator example
#include <iostream>     // std::cout, std::noskipws
#include <sstream>      // std::istringstream, std::ws

int main () {
  char a[10], b[10];

  std::istringstream iss ("one \n \t two");
  iss >> std::noskipws;
  iss >> a >> std::ws >> b;
  std::cout << a << ", " << b << '\n';

  return 0;
}


輸出
one, two


資料競爭

修改流物件 is
併發訪問同一流物件可能導致資料競爭,但標準流物件 cinwcin與 stdio 同步時除外(在這種情況下,不會發生資料競爭,儘管不保證提取的字元歸屬給哪個執行緒)。

異常安全

基本保證:如果丟擲異常,物件處於有效狀態。
如果 is 的最終錯誤狀態標誌不是 goodbit 並且其成員 exceptions 被設定為在該狀態下丟擲,則此函式將丟擲成員型別為 failure 的異常。
內部操作丟擲的任何異常都會被函式捕獲並處理,從而設定 isbadbit 標誌。如果 badbit 在對 isexceptions 的最後一次呼叫中被設定,則函式將重新丟擲捕獲到的異常。

另見