Spec-Zone.ru › C++

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

См. также

ignore
извлекает и отбрасывает символы, пока не будет найден заданный символ
(открытая функция-член 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API