Spec-Zone.ru › C++

std::codecvt<InternT,ExternT,StateT>::unshift, do_unshift

Определено в заголовке <locale>
public:
result unshift( StateT& state, ExternT* to, ExternT* to_end,
                ExternT*& to_next ) const;
(1)
protected:
virtual result do_unshift( StateT& state, ExternT* to, ExternT* to_end,
                           ExternT*& to_next ) const;
(2)
1) Общедоступная функция-член, вызывает функцию-член do_unshift наиболее производного класса.
2) Если кодировка, представленная этим codecvt фрагментом, зависит от состояния, и state представляет состояние преобразования, которое не является начальным состоянием сдвига, записывает символы, необходимые для возврата в начальное состояние сдвига. Символы записываются в массив символов, первый элемент которого указан в to. Не более чем to_end - to символов будут записаны. Параметр to_next обновляется, указывая на позицию после последнего записанного символа.

Значение возврата

Значение типа std::codecvt_base::result, указывающее на статус успешности следующим образом:

ok все необходимые символы были записаны. state теперь представляет начальное состояние сдвига
partial недостаточно места в буфере вывода. to_next == to_end
error произошла неопределенная ошибка
noconv кодировка не зависит от состояния, последовательность завершения не требуется

Примечания

Эта функция вызывается std::basic_filebuf::close() и в других ситуациях при завершении последовательности многобайтовых символов, зависящих от состояния.

Пример

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение, как опубликовано Корректное поведение
LWG 305 C++98 std::codecvt<wchar_t, char, std::mbstate_t>::do_unshift
требовалось не записывать никаких символов
не требуется
LWG 380 C++98 значение возврата partial означало 'необходимо предоставить больше символов для завершения', но ни один символ не предоставляется исправлено на указание
недостаточного пространства буфера
LWG 381 C++98 state не требовалось быть действительным, и
error возвращалось, если state было недействительным
state должно быть действительным, и
возвращение error указывает на ошибку
LWG 664 C++98 std::codecvt<char, char, std::mbstate_t>::do_unshift
требовалось не записывать никаких символов
не требуется
LWG 665 C++98 std::codecvt<char, char, std::mbstate_t>::do_unshift
требовалось вернуть noconv
не требуется

См. также

wcrtomb
преобразует широкий символ в его многобайтовое представление, учитывая состояние
(функция)
do_out
[virtual]
преобразует строку из InternT в ExternT, например, при записи в файл
(виртуальная защищенная функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/locale/codecvt/unshift

Spec-Zone.ru

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