名稱空間
變體
操作

std::ws

來自 cppreference.com
< cpp‎ | io‎ | manip
 
 
 
輸入/輸出操縱器
浮點格式化
整數格式化
布林格式化
欄位寬度和填充控制
其他格式化
空白字元處理
ws
輸出重新整理
(C++20)  

狀態標誌操作
時間與金錢 I/O
(C++11)
(C++11)
(C++11)
(C++11)
帶引號的操縱器
(C++14)
 
定義於標頭檔案 <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> 的公共成員函式) [編輯]