ATUALIZAÇÃO - essa resposta, embora pareça fazer sentido para mim e para os outros, acaba por estar amplamente errada (e suficientemente errada em relação à intenção, como efetivamente errada). Como (como apontado em um comentário do AProgrammer), não é permitido usar o UCS fora das constantes da string quando o mesmo caractere pode ser representado normalmente no conjunto de caracteres base. Portanto, não é possível usá-lo para escapar de palavras-chave, como no meu exemplo; e não usá-lo para criar 'identificadores' 23skiddo
escapando do2
. Ainda poderia ser usado para tornar os nomes compatíveis com idiomas externos, eu acho, mas apenas ao que parece, quando esses nomes começam com uma letra ou um caractere estendido e contêm apenas letras, dígitos, sublinhado e caracteres estendidos - o que parece muito restritivo para apoiar adequadamente essa intenção. Portanto, deve ser que a intenção principal seja (como na resposta do AProgrammer) permitir esses caracteres extras nos identificadores e habilitar os editores de origem onde esses caracteres são exibidos graficamente, enquanto ainda permite que o arquivo de origem esteja em ASCII simples.
Programas C ++ podem chamar funções escritas em outros idiomas. É uma boa estratégia por parte do comitê de padronização garantir que o C ++ seja interoperável com outros idiomas, o que pode permitir caracteres não alfanuméricos ou unicode nos nomes das funções, mesmo que esses idiomas ainda não existam. O padrão não precisa especificar como isso funcionará no nível do vinculador, etc; mas é bom ter um mecanismo especificado em vigor para permitir isso.
Você não precisa olhar para o futuro para ver uma utilidade para isso. Suponha que eu tenha uma biblioteca C antiga com uma função chamada catch
(ou protegida ou mutável) ... e que eu queira chamá-la de C ++. E por qualquer motivo, não posso ou não quero modificar o código C (a propósito, mais de uma vez tive que lidar com códigos C antigos que usavam um nome de função que se tornara uma palavra-chave C ++ ...)
Com nomes de UC, posso escrever isso em um cabeçalho e, em seguida, basta chamar '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 é feio, mas não importa, pois está apenas em um lugar no cabeçalho. A mesma abordagem pode ser usada para criar stubs para chamar funções em outros idiomas e funciona mesmo se os nomes forem palavras-chave em C ++ ou unicode, ou tiverem espaços .
ou outra pontuação incorporada neles
Vários outros idiomas possuem dispositivos que permitem a criação de identificadores que não seguem o padrão geral; por exemplo em Verilog, \abcd
é um identificador equivalente a abcd
, mas \while
e \23skidoo
e \44.e2
são identificadores também, que necessitam o prefixo barra invertida para ser vistos como tal. Devido à maneira como o Verilog é usado, é importante permitir qualquer nome, onde eles se relacionam com interfaces externas.
Ele permite que um sistema permita que caracteres unicode no identificador exportem a fonte em um formato compilável em qualquer compilador em conformidade padrão. IE, é uma maneira de codificar unicode sobre o conjunto de caracteres básico (mais ou menos como o print-quote é usado para email, sistemas que sabem melhor são capazes de fazer um trabalho melhor, outros sistemas ainda estão funcionando).
fonte
Alguém pode querer criar um identificador usando um caractere de idioma estrangeiro que não possa ser digitado no teclado ou no dispositivo de entrada. Como alternativa, o identificador pode conter um caractere que não é imprimível usando os recursos de fonte ou saída do dispositivo, mas o IDE deseja mostrar uma representação precisa.
fonte
O C ++ exige que os caracteres estendidos reais que aparecem literalmente na fonte se comportem de forma idêntica aos Nomes Universal de Caracteres. Permitir nomes de caracteres universais nos identificadores permite que os programadores usem caracteres estendidos nos identificadores.
fonte