Compartir a través de


char, wchar_t, char8_t, char16_t, char32_t

Los tipos char, wchar_t, char8_t, char16_t y char32_t son tipos integrados que representan caracteres alfanuméricos, glifos no alfanuméricos y caracteres no imprimibles.

Sintaxis

char     ch1{ 'a' };  // or { u8'a' }
wchar_t  ch2{ L'a' };
char16_t ch3{ u'a' };
char32_t ch4{ U'a' };

Comentarios

El tipo char era el tipo de carácter original de C y C++. El tipo char almacena caracteres del juego de caracteres ASCII o de cualquiera de los juegos de caracteres ISO-8859, así como bytes individuales de caracteres multibyte, como Shift-JIS o la codificación UTF-8 del juego de caracteres Unicode. En el compilador de Microsoft, char es un tipo de 8 bits. Es un tipo distinto tanto de signed char como de unsigned char. De forma predeterminada, las variables de tipo char se promueven a int como si fueran de tipo signed char, a menos que se use la opción del compilador /J. En /J, se tratan como de tipo unsigned char y se promueven a int sin la extensión de signo.

El tipo unsigned char se usa a menudo para representar un byte que no corresponde a un tipo integrado en C++.

El tipo wchar_t es un tipo de carácter ancho definido por la implementación. En el compilador de Microsoft, representa un carácter ancho de 16 bits que se usa para almacenar Unicode codificado como UTF-16LE, que es el tipo de carácter nativo en los sistemas operativos Windows. Las versiones de carácter ancho de las funciones de la biblioteca Universal C Runtime (UCRT) usan wchar_t y sus tipos de puntero y de matriz como parámetros y valores devueltos, al igual que las versiones de carácter ancho de la API nativa de Windows.

Los tipos char8_t, char16_t y char32_t representan caracteres anchos de 8, 16 y 32 bits respectivamente (char8_t es nuevo en C++20 y requiere la opción del compilador /std:c++20 o /std:c++latest). El Unicode codificado como UTF-8 se puede almacenar en el tipo char8_t. Las cadenas de tipo char8_t y char se conocen como cadenas estrechas, incluso cuando se usan para codificar caracteres Unicode o multibyte. El Unicode codificado como UTF-16 se puede almacenar en el tipo char16_t y el Unicode codificado como UTF-32, en el tipo char32_t. Las cadenas de estos tipos y wchar_t se conocen como cadenas anchas, aunque el término a menudo hace referencia específicamente a cadenas de tipo wchar_t.

En la biblioteca estándar de C++, el tipo basic_string está especializado en cadenas anchas y estrechas. Use std::string cuando los caracteres sean de tipo char; std::u8string cuando los caracteres sean de tipo char8_t; std::u16string cuando los caracteres sean de tipo char16_t; std::u32string cuando los caracteres sean de tipo char32_t, y std::wstring cuando los caracteres sean de tipo wchar_t.

Otros tipos que representan texto, incluidos std::stringstream y std::cout, disponen de especializaciones de cadenas anchas y estrechas.