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
;这并不适用于eofbit
已经在 is 上设置,然后调用ws
,在这种情况下,哨兵对象的构造将设置failbit
)。
- 输入序列中的下一个可用字符 c 不是空格,由 std::isspace(c, is.getloc()) 确定。非空格字符不会被提取。
这是一个只读的 I/O 操纵器,它可以与表达式一起使用,例如 in >> std::ws,用于任何类型为 std::basic_istream 的 in。
内容 |
[编辑] 参数
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> 的公共成员函数) |