UPDATE - Diese Antwort, obwohl sie für mich und andere sinnvoll erschien, erweist sich als weitgehend falsch (und in Bezug auf die Absicht hinreichend falsch, um tatsächlich einfach falsch zu sein). Da (wie erwähnt in einem Kommentar von AProgrammer) es nicht erlaubt UCS außerhalb von String - Konstanten zu verwenden , wenn das gleiche Zeichen normalerweise in dem Basiszeichensatz dargestellt werden könnte. Verwenden Sie es also nicht, um Schlüsselwörter zu umgehen, wie in meinem Beispiel. und keine Verwendung, um "Identifikatoren" wie 23skiddo
durch Flucht vor dem zu machen2
. Es könnte immer noch verwendet werden, um Namen mit externen Sprachen kompatibel zu machen, aber nur, wenn diese Namen entweder mit einem Buchstaben oder einem erweiterten Zeichen beginnen und nur Buchstaben, Ziffern, Unterstreichungen und erweiterte Zeichen enthalten - welche scheint viel zu restriktiv, um diese Absicht richtig zu unterstützen. Es muss also sein, dass die Hauptabsicht (wie in der Antwort von AProgrammer) darin besteht, diese zusätzlichen Zeichen in Bezeichnern zuzulassen und Quelleditoren zu aktivieren, in denen diese Zeichen grafisch angezeigt werden, während die Quelldatei weiterhin in einfachem ASCII-Format vorliegt.
C ++ - Programme können Funktionen aufrufen, die in anderen Sprachen geschrieben sind. Es ist eine gute Strategie des Standardisierungsausschusses, sicherzustellen, dass C ++ mit anderen Sprachen kompatibel ist, die möglicherweise nicht alphanumerische Zeichen oder Unicode-Zeichen in Funktionsnamen zulassen, auch wenn solche Sprachen noch nicht vorhanden sind. Der Standard muss nicht angeben, wie dies auf Linker-Ebene usw. funktioniert. Es ist jedoch gut, einen bestimmten Mechanismus zu haben, um dies zu ermöglichen.
Sie müssen nicht in die Zukunft schauen, um eine Verwendung dafür zu sehen. Angenommen, ich habe eine alte C-Bibliothek mit einer Funktion namens catch
(oder geschützt oder veränderlich) ... und möchte sie von C ++ aus aufrufen. Und aus irgendeinem Grund kann oder will ich den C-Code nicht ändern (Übrigens musste ich mich mehr als einmal mit altem C-Code befassen, der einen Funktionsnamen verwendete, der zu einem C ++ - Schlüsselwort geworden war ...)
Mit UC-Namen kann ich dies in einen Header schreiben und dann einfach 'catch_func ()' aufrufen:
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); }
Sicher, es ist hässlich, aber es spielt keine Rolle, da es sich nur an einer Stelle im Header befindet. Der gleiche Ansatz könnte verwendet werden, um Stubs dazu zu bringen, Funktionen in anderen Sprachen aufzurufen, und funktioniert auch dann, wenn die Namen C ++ - Schlüsselwörter oder Unicode sind oder Leerzeichen .
oder andere Interpunktion darin eingebettet sind
Verschiedene andere Sprachen verfügen über Geräte, mit denen Bezeichner erstellt werden können, die nicht dem allgemeinen Muster entsprechen. Zum Beispiel in Verilog \abcd
ist ein Bezeichner äquivalent zu abcd
, aber \while
und \23skidoo
und \44.e2
sind auch Bezeichner, für die das Backslash-Präfix als solches angesehen werden muss. Aufgrund der Art und Weise, wie Verilog verwendet wird, ist es wichtig, überhaupt Namen zuzulassen, die sich auf externe Schnittstellen beziehen.