Namespaces
Variants

std::ctype<CharT>:: widen, do_widen

From cppreference.net
Определено в заголовке <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)
1,2) Публичная функция-член, вызывает соответствующую защищенную виртуальную функцию-член do_widen производного класса. Перегрузка (1) вызывает do_widen ( c ) , перегрузка (2) вызывает do_widen ( beg, end, dst ) .
3) Преобразует однобайтовый символ c в соответствующее широкосимвольное представление, используя наиболее простое разумное преобразование. Обычно это применимо только к символам, чья многобайтовая кодировка занимает один байт (например, U+0000-U+007F в UTF-8).
4) Для каждого символа в массиве символов [ 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 - указатель на первый элемент массива символов для заполнения

Возвращаемое значение

1,3) Расширенный символ.
2,4) end

Пример

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