Espacios de nombres
Variantes
Acciones

Identificadores

De cppreference.com
< cpp‎ | language

Un identificador es una secuencia, con tamaño arbitrario, de dígitos, guiones bajos, letras latinas (mayúsculas y minúsculas), y algunos caracteres Unicode (ver más abajo). Un identificador válido debe comenzar con un carácter que no sea un dígito. En los identificadores se distingue entre mayúsculas y minúsculas, y cada carácter es trascendente.

Nota: la gramática formal de C++ se exige que los caracteres Unicode sean ”escapados” con \u o \U, pero como consecuencia de la fase 1 de traducción, así es exactamente como se presentan al compilador los caracteres unicode sin procesar del código fuente. El soporte para característica puede ser limitada, por ejemplo: gcc

Contenido

[editar] En las declaraciones

Un identificador se puede usar para nombrar objetos, referencias, funciones, enumeraciones, tipos, miembros de clase, espacios de nombre, plantillas (template), especialización de plantillas, paquetes de parámetros, etiquetas de goto, y otras entidades, con las siguientes excepciones:

  • los identificadores que son palabras reservadas no se pueden utilizar para otros propositos;
  • los identificadores con doble guión bajo en cualquier lugar está reservados;
  • los identificadores que comienzan on un guión bajo seguido de una letra mayúscula están reservados;
  • Los identificadores que comienzan con un guión bajo está reservados en el espacio de nombres global.

Reservado significa que los archivos cabecera de la biblioteca estándar #define o declara estos identificadores para sus necesidades internas, el compilador puede predefinir identificadores no estándar de este tipo, y ese algoritmo de creación de nombres puede suponer que estos identificadores no están en uso. Si el programador utiliza estos identificadores, el comportamiento será indeterminado.

También es indeterminado el comportamiento en el caso de utilizar #define o #indef con nombres igual a palabras reservadas. Si se incluye un archivo cabecera de la biblioteca estándar, y se #define o #undef identificadores con nombres idénticos a los declarados es esos archivos el resultado es indeterminado.

[editar] En expresiones

Un identificador que nombra a una variable, función, especialización de restricciones(desde C++20), o enumerador se pueden utilizar como una expresión. La expresión, que solamente consiste en el identificador, devuelve la entidad nombrada por el mismo. La categoría de valor de la expresión es lvalue si el identificador nombra a una función, variable o variable miembro de clase, y prvalue para el resto (por ejemplo: enumeración es una expresion prvalue, una especialización de una restricción es un prvalue booleano(desde C++20)).

En el cuerpo de una función miembro de clase no estática, cada identificador que nombra a un miembro no estático es implícitamente convertido en una expresión de acceso a miembro de clase this->miembro.

[editar] Identificadores no calificados

Además de declarar correctamente los identificadores, se puede utilizar en expresiones con el mismo cometido lo siguiente:

Junto con los identificadores, se los conoce como id-expresiones no calificadas .

[editar] Identificadores calificados

Una id-expresión calificada es una id-expresión no calificada precedida por un operador de resolución de ámbito ::, y opcionalmente, una secuencia de enumeración (desde C++11), clase o espacio de nombres o expresión decltype(desde C++11), separados por el operador de resolución de ámbito. Por ejemplo, la expresión std::string::npos es una expresión que denomina al miembro estático npos en la clase string que a su vez está en el espacio de nombres std. La expresión ::tolower denomina a la función tolower en el espacio de nombres global. La expresión ::std::cout denomina a la variable global cout en el espacio de nombres std, que es un espacio de nombres de primer nivel. La expresión boost::signals2::connection denomina el tipo connection declarado en el espacio de nombres signals2, que a su vez esta declarado en el espacio de nombres boost.

La palabra reservada template puede aparecer en identificadores calificados si es necesario precisar la dependencia de nombres en una plantilla.

Ver búsqueda calificada de nombres para detalles sobre la búsqueda de nombres para identificadores calificados.

[editar] Nombres

Un nombre es el uso, para referirse a una entidad o etiqueta, de lo siguiente :

  • un identificador;
  • un nombre de operador sobrecargado en notación de función (operator+, operator new);
  • un nombre de función de conversión definida por usuario (operator bool);
  • un nombre de operador literal definido por usuario (operator "" _km);
  • un nombre de plantilla seguido por la lista de argumentos (MiPlantilla<int>).

Cada nombre que denomina a una entidad es insertada en el programa mediante una declaración. Cada nombre que denomina a una etiqueta es insertada en el programa mediante la sentencia goto o una sentencia etiquetada. Un nombre que se usa en más de una unidad de traducción puede referirse a la misma o a distintas entidades, dependiendo del enlazado.

En un programa cuando el compilador encuentra un nombre desconocido, lo asocia con su declaración a través de la búsqueda de nombres, excepto para los nombres dependientes en declaraciones y definiciones de plantillas (para estos nombres el compilador determina si se refiere a un tipo, una plantilla, o alguna otra entidad, lo que puede requerir que se precise explícitamente).

[editar] Caracteres Unicode en identificadores

Los siguientes grupos caracteres Unicode están permitidos en los identificadores:

Puntos de código Descripción Caracteres
U+00A8 DIÉRESIS ¨
U+00AA ORDINAL FEMENINO ª
U+00AD GUIÓN SEPARADOR DE SÍLABAS ­
U+00AF MACRÓN ¯
U+00B2 - U+00B5 SUPERÍNDICE DOS – SÍMBOLO DE MICRO ²³´µ
U+00B7 - U+00BA PUNTO CENTRADO – INDICADOR ORDINAL MASCULINO ·¸¹º
U+00BC - U+00BE FRACCIÓN VULGAR DE UN CUARTO – FRACCIÓN VULGAR DE TRES CUARTOS ¼½¾
U+00C0 - U+00D6 A MAYÚSCULA CON ACENTO GRAVE – LETRA LATINA MAYÚSCULA O CON DIÉRESIS ÀÁÂ...ÔÕÖ
U+00D8 - U+00F6 LETRA LATINA MINÚSCULA O CON BARRA INCLINADA – LETRA LATINA MINÚSCULA O CON DIÉRESIS ØÙÚ...ôõö
U+00F8 - U+167F LETRA LATINA MINÚSCULA O CON BARRA INCLINADA – CANADIAN SYLLABICS BLACKFOOT W øùú...ᙽ ᙾ ᙿ
U+1681 - U+180D OGHAM LETTER BEITH - MONGOLIAN FREE VARIATION SELECTOR THREE ᚁᚂᚃ...᠋᠌᠍
U+180F - U+1FFE SYRIAC LETTER BETH - GREEK DASIA ᠏ ᠐ ᠑ ...ῼ ´ ῾
U+200B - U+200D ZERO WIDTH SPACE - ZERO WIDTH JOINER ​‌‍
U+202A - U+202E LEFT-TO-RIGHT EMBEDDING - RIGHT-TO-LEFT OVERRIDE ‪ ‫ ‬ ‭ ‮
U+203F - U+2040 UNDERTIE - CHARACTER TIE ‿⁀
U+2054 INVERTED UNDERTIE
U+2060 - U+218B WORD JOINER - TURNED DIGIT THREE ⁠ ⁡ ⁢ ...↉ ↊ ↋
U+2460 - U+24FF CÍRCULO CON DÍGITO UNO - CÍRCULO NEGATIVO CON DÍGITO UNO ①②③...⓽ ⓾ ⓿
U+2776 - U+2793 DINGBAT NEGATIVE CIRCLED DIGIT ONE - DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN ❶❷❸...➑➒➓
U+2C00 - U+2DFF GLAGOLITIC CAPITAL LETTER AZU - COMBINING CYRILLIC LETTER IOTIFIED BIG YUS ⰀⰁⰂ...ⷽ ⷾ ⷿ
U+2E80 - U+2FFB CJK RADICAL REPEAT - IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID ⺀⺁⺂ ...⿹⿺⿻
U+3004 - U+3007 JAPANESE INDUSTRIAL STANDARD SYMBOL - IDEOGRAPHIC NUMBER ZERO 〄々〆〇
U+3021 - U+302F HANGZHOU NUMERAL ONE - HANGUL DOUBLE DOT TONE MARK 〡〢〣...〭 〮 〯
U+3031 - U+D7FB VERTICAL KANA REPEAT MARK - HANGUL JONGSEONG PHIEUPH-THIEUTH 〱 〲 〳 ...ퟹ ퟺ ퟻ
U+F900 - U+FD3D CJK COMPATIBILITY IDEOGRAPH-F900 - ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM 豈更車...ﴻﴼﴽ
U+FD50 - U+FDC7 ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM -
ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
ﵐ ﵑ ﵒ ...ﷅ ﷆ ﷇ
U+FDF0 - U+FE44 ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM -
PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
ﷰ ﷱ ﷲ ...﹂﹃﹄
U+FE47 - U+FFFD PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET - REPLACEMENT CHARACTER ﹇﹈﹉...  �
U+10000 - U+1FFFD LINEAR B SYLLABLE B008 A - CHEESE WEDGE (U+1F9C0) 𐀀 𐀁 𐀂 ...🿻 🿼 🿽
U+20000 - U+2FFFD <CJK Ideograph Extension B, First> - CJK COMPATIBILITY IDEOGRAPH-2FA1D (U+2FA1D)
U+30000 - U+3FFFD
U+40000 - U+4FFFD
U+50000 - U+5FFFD
U+60000 - U+6FFFD
U+70000 - U+7FFFD
U+80000 - U+8FFFD
U+90000 - U+9FFFD
U+A0000 - U+AFFFD
U+B0000 - U+BFFFD
U+C0000 - U+CFFFD
U+D0000 - U+DFFFD
U+E0000 - U+EFFFD LANGUAGE TAG (U+E0001) - VARIATION SELECTOR-256 (U+E01EF)


Los siguientes caracteres Unicode no está permitidos como comienzo de un identificador:

Puntos de código Descripción Caracteres
U+0300 - U+036F COMBINING GRAVE ACCENT - COMBINING LATIN SMALL LETTER X
U+1DC0 - U+1DFF COMBINING DOTTED GRAVE ACCENT - COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
U+20D0 - U+20FF COMBINING LEFT HARPOON ABOVE - COMBINING ASTERISK ABOVE
U+FE20 - U+FE2F COMBINING LIGATURE LEFT HALF - COMBINING CYRILLIC TITLO RIGHT HALF

[editar] Véase también

Documentación de C de identificador