std::ws
Определён в заголовочном файле <istream> | ||
|---|---|---|
template< class CharT, class Traits > std::basic_istream<CharT, Traits>& ws( std::basic_istream<CharT, Traits>& is ); |
Удаляет начальные пробельные символы из входного потока.
Ведёт себя как неформатированная функция ввода, за исключением того, что is.gcount() не изменяется. После создания и проверки объекта sentry извлекает символы из потока и отбрасывает их, пока не произойдёт одно из следующих условий:
- во входной последовательности возникает условие конца файла (в этом случае функция вызывает
setstate(eofbit), но не устанавливаетfailbit; это не относится к случаю, когдаeofbitуже установлен дляisдо вызоваws, поскольку в таком случае создание объекта sentry установитfailbit). - следующий доступный символ
cво входной последовательности не является пробельным символом согласноstd::isspace(c, is.getloc()). Непробельный символ не извлекается.
Это манипулятор ввода-вывода только для ввода; его можно вызывать с помощью выражения, например in >> std::ws, для любого in типа std::basic_istream.
Параметры
| is | - | ссылка на входной поток |
Возвращаемое значение
is (ссылка на поток после извлечения последовательности пробельных символов).
Примечания
Если eofbit установлен для потока до вызова, создание объекта sentry установит 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 мог не создавать объект sentry(несогласованно с другими функциями ввода) | требуется создать объект sentry |
См. также
| извлекает и отбрасывает символы, пока не будет найден заданный символ (открытая функция-член std::basic_istream<CharT,Traits>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/manip/ws