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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de