ACTUALIZACIÓN : esta respuesta, aunque parecía tener sentido para mí y para los demás, resulta ser en gran medida errónea (y suficientemente errónea con respecto a la intención, como para ser efectivamente simplemente errónea). Puesto que (como en punta a cabo en un comentario por AProgrammer) que está no permite el uso de UCS exterior de las constantes de cadena cuando el mismo carácter puede ser representado normalmente en el juego de caracteres de base. Entonces, no usarlo para escapar de palabras clave, como en mi ejemplo; y no usarlo para hacer 'identificadores' como 23skiddo
escapando del2
. Supongo que aún podría usarse para hacer que los nombres sean compatibles con idiomas externos, pero solo parece que cuando esos nombres comienzan con una letra o un carácter extendido, y contienen solo letras, dígitos, subrayado y caracteres extendidos, que parece demasiado restrictivo para apoyar adecuadamente esa intención. Por lo tanto, debe ser que la intención principal es (como en la respuesta de AProgrammer) permitir estos caracteres adicionales en los identificadores, y permitir a los editores de origen donde estos caracteres se muestran gráficamente, al tiempo que permite que el archivo de origen esté en ASCII simple.
Los programas C ++ pueden llamar a funciones escritas en otros lenguajes. Es una buena estrategia por parte del comité de estandarización asegurarse de que C ++ sea interoperable con otros lenguajes que pueden permitir caracteres no alfanuméricos o unicode en los nombres de funciones, incluso si dichos lenguajes aún no existen. El estándar no necesita especificar cómo funcionará esto a nivel de enlazador, etc; pero es bueno tener un mecanismo específico para permitirlo.
No necesita mirar hacia el futuro para ver un uso para esto. Supongamos que tengo una antigua biblioteca de C con una función llamada catch
(o protegida, o mutable) ... y quiero llamarla desde C ++. Y por alguna razón, no puedo o no quiero modificar el código C (Por cierto, más de una vez tuve que lidiar con el código C antiguo que usaba un nombre de función que se había convertido en una palabra clave C ++ ...)
Con los nombres UC, puedo escribir esto en un encabezado y luego simplemente llamar 'catch_func ()':
extern "C" {
int catc\u0068( int a, int b ); // C 'catch()' function
}
inline int catch_func( int a, int b ) { return catc\u0068(a,b); }
Claro que es feo, pero no importa ya que solo está en un lugar en el encabezado. El mismo enfoque se podría usar para hacer stubs para llamar a funciones en otros lenguajes, y funciona incluso si los nombres son palabras clave de C ++ o unicode, o tienen espacios .
u otros signos de puntuación incrustados en ellos
Varios otros idiomas tienen dispositivos que permiten la creación de identificadores que no siguen el patrón general; por ejemplo, en Verilog, \abcd
es un identificador equivalente a abcd
, pero \while
y \23skidoo
y también \44.e2
son identificadores, que necesitan que el prefijo de barra diagonal inversa se vea como tal. Debido a la forma en que se usa Verilog, es importante permitir cualquier nombre, en lo que respecta a las interfaces externas.
Permite un sistema que permite que los caracteres unicode en el identificador exporten la fuente en un formato que se pueda compilar en cualquier compilador estándar. Es decir, es una forma de codificar unicode sobre el conjunto de caracteres básico (más o menos como imprimible entre comillas se usa para correo electrónico, los sistemas que saben mejor pueden hacer un mejor trabajo, otros sistemas aún funcionan).
fuente
Alguien puede querer crear un identificador usando un carácter de idioma extranjero que no se pueda ingresar en el teclado o dispositivo de entrada. Alternativamente, el identificador puede contener un carácter que no se puede imprimir utilizando la fuente o las capacidades de salida del dispositivo, pero el IDE desea mostrar una representación precisa.
fuente
C ++ requiere que los caracteres extendidos reales que aparecen literalmente en la fuente se comporten de manera idéntica con los nombres de caracteres universales. Al permitir nombres de caracteres universales en los identificadores, los programadores pueden usar caracteres extendidos en los identificadores.
fuente