AGGIORNAMENTO - questa risposta, sebbene sembrasse avere un senso per me e per gli altri, risulta in gran parte sbagliata (e sufficientemente sbagliata riguardo all'intenzione, da essere effettivamente semplicemente sbagliata). Poiché (come sottolineato in un commento di AProgrammer) non è consentito utilizzare UCS al di fuori delle costanti di stringa quando lo stesso carattere potrebbe essere rappresentato normalmente nel set di caratteri di base. Quindi, non usarlo per sfuggire alle parole chiave, come nel mio esempio; e non usarlo per rendere gli "identificatori" come 23skiddo
sfuggendo a2
. Potrebbe ancora essere usato per rendere i nomi compatibili con le lingue esterne, immagino, ma solo, sembra, quando quei nomi iniziano con una lettera o un carattere esteso e contengono solo lettere, cifre, sottolineature e caratteri estesi - che sembra troppo restrittivo per supportare adeguatamente tale intento. Quindi deve essere che l'intento principale sia (come nella risposta di AProgrammer) consentire questi caratteri extra negli identificatori e abilitare gli editor di sorgenti in cui questi caratteri sono visualizzati graficamente, pur consentendo al file sorgente di essere in chiaro ASCII.
I programmi C ++ possono chiamare funzioni scritte in altre lingue. È una buona strategia da parte del comitato di standardizzazione garantire che il C ++ sia interoperabile con altre lingue che potrebbero consentire caratteri non alfanumerici o unicode nei nomi delle funzioni, anche se tali lingue non esistono ancora. Lo standard non deve specificare come funzionerà a livello di linker, ecc .; ma è bene disporre di un meccanismo specifico per consentirlo.
Non è necessario guardare al futuro per vedere un uso per questo. Supponiamo di avere una vecchia libreria C con una funzione chiamata catch
(o protetta, o mutabile) ... e voglio chiamarla da C ++. E per qualsiasi motivo non posso o non voglio modificare il codice C (A proposito, ho dovuto più di una volta confrontarmi con il vecchio codice C che utilizzava un nome di funzione che era diventato una parola chiave C ++ ...)
Con i nomi UC posso scriverlo in un'intestazione e quindi chiamare '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); }
Certo è brutto, ma non importa dal momento che è solo in un posto nell'intestazione. Lo stesso approccio potrebbe essere usato per creare stub per chiamare funzioni in altre lingue e funziona anche se i nomi sono parole chiave C ++ o unicode, oppure contengono spazi .
o altri segni di punteggiatura incorporati
Varie altre lingue hanno dispositivi che consentono la creazione di identificatori che non seguono il modello generale; per esempio in Verilog, \abcd
è un identificatore equivalente a abcd
, ma \while
e \23skidoo
e \44.e2
anche identificatori, che hanno bisogno del prefisso barra rovesciata per essere visto come tale. A causa del modo in cui Verilog viene utilizzato, è importante consentire qualsiasi nome, in cui si riferiscono a interfacce esterne.