Namespaces
Variants

Character sets and encodings

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Esta página describe varios conjuntos de caracteres especificados por el estándar C++.

Contenidos

Conjunto de caracteres de traducción

El conjunto de caracteres de traducción consiste en los siguientes elementos:

  • cada carácter abstracto asignado a un punto de código en el Unicode codespace, y
  • un carácter distinto para cada valor escalar Unicode no asignado a un carácter abstracto.

El conjunto de caracteres de traducción es un superconjunto del conjunto de caracteres básico y del conjunto de caracteres literales básicos (ver más abajo).

(desde C++23)

Conjunto de caracteres básico

El conjunto básico de caracteres consiste en los siguientes 96 (until C++26) 99 (since C++26) caracteres:

Punto de código Carácter Glifo
U+0009 Tabulación de caracteres
U+000B Tabulación de línea
U+000C Alimentación de formulario (FF)
U+0020 Espacio
U+000A Alimentación de línea (LF) nueva línea
U+0021 Signo de exclamación !
U+0022 Comillas "
U+0023 Signo de número #
U+0025 Signo de porcentaje %
U+0026 Et &
U+0027 Apóstrofe '
U+0028 Paréntesis izquierdo (
U+0029 Paréntesis derecho )
U+002A Asterisco *
U+002B Signo más +
U+002C Coma ,
U+002D Guion -
U+002E Punto .
U+002F Barra oblicua /
U+0030 .. U+0039 Dígito cero .. nueve 0 1 2 3 4 5 6 7 8 9
U+003A Dos puntos :
U+003B Punto y coma ;
U+003C Signo menor que <
U+003D Signo igual =
U+003E Signo mayor que >
U+003F Signo de interrogación ?
U+0041 .. U+005A Letra latina mayúscula A .. Z A B C D E F G H I J K L M

N O P Q R S T U V W X Y Z

U+005B Corchete izquierdo [
U+005C Barra invertida \
U+005D Corchete derecho ]
U+005E Acento circunflejo ^
U+005F Guion bajo _
U+0061 .. U+007A Letra latina minúscula a .. z a b c d e f g h i j k l m

n o p q r s t u v w x y z

U+007B Llave izquierda {
U+007C Línea vertical |
U+007D Llave derecha }
U+007E Tilde ~

Los siguientes caracteres se añaden al conjunto de caracteres básico desde C++26:

Punto de código Carácter Glifo
U+0024 Signo de Dólar $
U+0040 Arroba Comercial @
U+0060 Acento Grave `
(desde C++26)

Conjunto de caracteres literal básico

El conjunto de caracteres literales básicos consiste en todos los caracteres del conjunto de caracteres básico, más los siguientes caracteres de control:

Código de punto Carácter
U+0000 Nulo
U+0007 Timbre
U+0008 Retroceso
U+000D Retorno de carro (CR)

Conjunto de caracteres de ejecución

El conjunto de caracteres de ejecución y el conjunto de caracteres anchos de ejecución son superconjuntos del conjunto de caracteres literal básico. Las codificaciones de los conjuntos de caracteres de ejecución y los conjuntos de elementos adicionales (si los hay) son específicos de la configuración regional. Cada elemento del conjunto de caracteres anchos de ejecución debe ser representable como una unidad de código wchar_t distinta.

Unidad de código y codificación de literales

Una code unit es un valor entero de tipo carácter. Los caracteres en un character literal que no sea un literal de carácter multibyte o no codificable, o en un string literal se codifican como una secuencia de una o más code units, según lo determinado por el prefijo de codificación; esto se denomina la respectiva literal encoding .

Una codificación literal o una codificación específica de la localización de uno de los conjuntos de caracteres de ejecución codifica cada elemento del conjunto de caracteres literal básico como una única unidad de código con valor no negativo, distinta de la unidad de código para cualquier otro de estos elementos. Un carácter que no esté en el conjunto de caracteres literal básico puede codificarse con más de una unidad de código; el valor de dicha unidad de código puede ser el mismo que el de una unidad de código para un elemento del conjunto de caracteres literal básico. Las codificaciones de los conjuntos de caracteres de ejecución pueden no estar relacionadas con ninguna codificación literal.

La codificación literal ordinaria es la codificación aplicada a un carácter ordinario o literal de cadena. La codificación literal amplia es la codificación aplicada a un carácter amplio o literal de cadena.

El carácter U+0000 NULL se codifica como el valor 0. Ningún otro elemento del conjunto de caracteres de traducción se codifica con una unidad de código de valor 0. El valor de unidad de código de cada carácter de dígito decimal después del dígito 0 (U+0030) será uno mayor que el valor del anterior. Las codificaciones de literales ordinarias y anchas están definidas por la implementación en otros aspectos.

Para un literal UTF-8, UTF-16 o UTF-32, el valor escalar UCS correspondiente a cada carácter del conjunto de caracteres de traducción se codifica como se especifica en ISO/IEC 10646 para la forma de codificación UCS respectiva.

Notas

Los nombres estándar de algunos conjuntos de caracteres se han cambiado en C++23 mediante P2314R4 .

Nombre(s) nuevo(s) Nombre(s) antiguo(s)
basic character set basic source character set
basic literal character set basic execution character set
basic execution wide-character set

Mapeo desde los caracteres del archivo fuente (distinto de un archivo fuente UTF-8) (since C++23) hacia el juego de caracteres básico (until C++23) juego de caracteres de traducción (since C++23) durante la fase de traducción 1 está definido por la implementación, por lo que se requiere que una implementación documente cómo se representan los caracteres fuente básicos en los archivos fuente.

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
CWG 788 C++98 los valores de los miembros de los conjuntos de caracteres de ejecución
estaban definidos por la implementación, pero no eran específicos de la configuración regional
son específicos de la configuración regional
CWG 1796 C++98 la representación del carácter nulo (ancho) en
el conjunto básico de caracteres (anchos) de ejecución tenía todos los bits en cero
solo se requiere que el valor sea cero

Véase también

Tabla ASCII
Documentación de C para Conjuntos de caracteres y codificaciones