std::ws
From cppreference.com
| ヘッダ <istream>で定義 |
||
| template< class CharT, class Traits > std::basic_istream<CharT, Traits>& ws( std::basic_istream<CharT, Traits>& is ); |
||
入力ストリームから先頭の空白文字を破棄します。
is.gcount() は変更されない点を除き、UnformattedInputFunction と同様に動作します。セントリーオブジェクトを構築し、チェックした後、以下のいずれかの条件が発生するまでストリームから文字を抽出し、破棄します。
- 入力シーケンスでファイルの終端条件が発生した場合(この場合、関数は setstate(eofbit) を呼び出しますが、
failbitは設定しません。これは、wsの呼び出し前にeofbitがisにすでに設定されている場合には適用されず、その場合、セントリーオブジェクトの構築によりfailbitが設定されます)。
- 入力シーケンスの次の利用可能な文字 c が、std::isspace(c, is.getloc()) によって決定される空白文字ではない場合。空白文字ではない文字は抽出されません。
これは入力専用の I/O マニピュレータであり、任意の in (std::basic_istream 型)に対して、in >> std::ws のような式で呼び出すことができます。
目次 |
[編集] パラメータ
| 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++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 415 | C++98 | std::ws の呼び出しでセントリーが構築されない可能性がある(他の入力関数との不整合) |
必要 セントリーオブジェクトを構築する |
[編集] 関連項目
| 指定された文字が見つかるまで文字を抽出して破棄する ( std::basic_istream<CharT,Traits> の public メンバ関数) |