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