std::ctype<CharT>:: widen, do_widen
|
Определено в заголовке
<locale>
|
||
|
public
:
CharT widen ( char c ) const ; |
(1) | |
|
public
:
const char * widen ( const char * beg, const char * end, CharT * dst ) const ; |
(2) | |
|
protected
:
virtual CharT do_widen ( char c ) const ; |
(3) | |
|
protected
:
virtual const char * do_widen ( const char * beg, const char * end, CharT * dst ) const ; |
(4) | |
do_widen
производного класса. Перегрузка (1) вызывает
do_widen
(
c
)
, перегрузка (2) вызывает
do_widen
(
beg, end, dst
)
.
[
beg
,
end
)
, записывает соответствующий расширенный символ в последовательные позиции массива символов, на который указывает
dst
.
Расширение всегда возвращает широкий символ, но только символы из basic source character set (until C++23) basic character set (since C++23) гарантированно имеют уникальное, хорошо определённое преобразование расширения, которое также гарантированно является обратимым (с помощью narrow() ). На практике все символы, чьё многобайтовое представление является однобайтовым, обычно расширяются до своих широкосимвольных аналогов, а остальные возможные однобайтовые значения обычно отображаются в одно и то же значение-заполнитель, обычно CharT ( - 1 ) .
Расширение, если успешно, сохраняет все категории классификации символов, известные is() .
Содержание |
Параметры
| c | - | символ для преобразования |
| dflt | - | значение по умолчанию, возвращаемое при неудачном преобразовании |
| beg | - | указатель на первый символ в массиве символов для преобразования |
| end | - | указатель на позицию за последним символом массива символов для преобразования |
| dst | - | указатель на первый элемент массива символов для заполнения |
Возвращаемое значение
Пример
#include <iostream> #include <locale> void try_widen(const std::ctype<wchar_t>& f, char c) { wchar_t w = f.widen(c); std::cout << "The single-byte character " << +(unsigned char)c << " widens to " << +w << '\n'; } int main() { std::locale::global(std::locale("cs_CZ.iso88592")); auto& f = std::use_facet<std::ctype<wchar_t>>(std::locale()); std::cout << std::hex << std::showbase << "In Czech ISO-8859-2 locale:\n"; try_widen(f, 'a'); try_widen(f, '\xdf'); // German letter ß (U+00df) in ISO-8859-2 try_widen(f, '\xec'); // Czech letter ě (U+011b) in ISO-8859-2 std::locale::global(std::locale("cs_CZ.utf8")); auto& f2 = std::use_facet<std::ctype<wchar_t>>(std::locale()); std::cout << "In Czech UTF-8 locale:\n"; try_widen(f2, 'a'); try_widen(f2, '\xdf'); try_widen(f2, '\xec'); }
Возможный вывод:
In Czech ISO-8859-2 locale: The single-byte character 0x61 widens to 0x61 The single-byte character 0xdf widens to 0xdf The single-byte character 0xec widens to 0x11b In Czech UTF-8 locale: The single-byte character 0x61 widens to 0x61 The single-byte character 0xdf widens to 0xffffffff The single-byte character 0xec widens to 0xffffffff
Отчёты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 153 | C++98 |
widen
always called overload (4)
|
вызывает соответствующую перегрузку |
Смотрите также
вызывает
do_narrow
(публичная функция-член) |
|
|
расширяет символы
(публичная функция-член
std::basic_ios<CharT,Traits>
)
|
|
|
расширяет однобайтовый узкий символ в широкий символ, если возможно
(функция) |