std::ws
來自 cppreference.com
定義於標頭檔案 <istream> |
||
template< class CharT, class Traits > std::basic_istream<CharT, Traits>& ws( std::basic_istream<CharT, Traits>& is ); |
||
從輸入流中丟棄前導空白符。
行為如同一個 UnformattedInputFunction,除了 is.gcount() 不被修改。在構造並檢查哨兵物件後,從流中提取並丟棄字元,直到發生以下任一條件:
- 輸入序列中出現檔案結束條件(此時函式呼叫 setstate(eofbit) 但不設定
failbit
;如果呼叫ws
之前 is 上已設定eofbit
,則不適用此情況,此時哨兵物件的構造會設定failbit
)。
- 輸入序列中下一個可用字元 c 不是空白符,這由 std::isspace(c, is.getloc()) 確定。非空白字元未被提取。
這是一個僅用於輸入的 I/O 運算子,它可以與諸如 in >> std::ws 的表示式一起呼叫,其中 in 的型別為 std::basic_istream。
目錄 |
[編輯] 引數
is | - | 輸入流的引用 |
[編輯] 返回值
is(連續空白符提取後的流的引用)。
[編輯] 注意
如果在呼叫之前流上設定了 eofbit
,則哨兵物件的構造將設定 failbit
。
[編輯] 示例
執行此程式碼
#include <iomanip> #include <iostream> #include <istream> #include <sstream> #include <string> int main() { for (const char* str : {" #1 test", "\t #2 test", "#3 test"}) { std::string line; std::getline(std::istringstream{str}, line); std::cout << "getline returns:\t" << std::quoted(line) << '\n'; std::istringstream iss{str}; std::getline(iss >> std::ws, line); std::cout << "ws + getline returns:\t" << std::quoted(line) << '\n'; } }
輸出
getline returns: " #1 test" ws + getline returns: "#1 test" getline returns: " #2 test" ws + getline returns: "#2 test" getline returns: "#3 test" ws + getline returns: "#3 test"
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 415 | C++98 | 呼叫 std::ws 可能不會構造哨兵物件(與其他輸入函式不一致) |
需要構造 哨兵物件 |
[編輯] 參閱
提取並丟棄字元直到找到給定字元 ( std::basic_istream<CharT,Traits> 的公共成員函式) |