ОНОВЛЕННЯ - ця відповідь, хоч і мені, і іншим здавалося, має сенс, виявляється значною мірою помилковою (і достатньо помилковою щодо наміру, як фактично просто неправильної). Оскільки (як було зазначено в коментарі по AProgrammer) це НЕ дозволяється використовувати UCS поза строкових констант , коли той же символ може бути представлений , як правило , в базовий комплект символів. Отже, не використовуючи його для виходу з ключових слів, як у моєму прикладі; і не використовуючи його для створення "ідентифікаторів", схоже 23skiddo
на втечу2
. Я все-таки міг би використовуватись для того, щоб імена сумісні із зовнішніми мовами, я думаю, але тільки, мабуть, коли ці імена починаються або з літери, або з розширеним символом, і містять лише літери, цифри, підкреслення та розширені символи - які здається занадто обмежуючим, щоб правильно підтримувати цей намір. Отже, повинно бути, що головним наміром є (як у відповіді AProgrammer) дозволити цих додаткових символів в ідентифікаторах та включити редактори джерел, де ці символи відображаються графічно, при цьому все ж дозволяючи вихідному файлу бути в простому ASCII.
Програми C ++ можуть викликати функції, написані іншими мовами. Доброю стратегією з боку комітету зі стандартизації є забезпечення того, що C ++ буде взаємодіяти з іншими мовами, які можуть дозволити не алфавітно-цифрові символи або символи unicode у назвах функцій, навіть якщо таких мов ще не існує. У стандарті не потрібно вказувати, як це працюватиме на рівні лінкера тощо; але добре мати визначений механізм, щоб це дозволяло.
Вам не потрібно дивитись у майбутнє, щоб побачити користь для цього. Припустимо, у мене є стара бібліотека C з функцією в ній, яка називається catch
(або захищеною, або змінною) ... і я хочу її зателефонувати з C ++. І з будь-якої причини я не можу або не хочу змінювати код C (до речі, мені вже не раз доводилося стикатися зі старим кодом C, який використовував ім'я функції, що стало ключовим словом C ++ ...)
З іменами UC я можу записати це у заголовок, а потім просто зателефонувати "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); }
Звичайно, це некрасиво, але це не має значення, оскільки він знаходиться лише в одному місці в заголовку. Цей же підхід може бути використаний для створення заглушок для виклику функцій іншими мовами і працює, навіть якщо назви містять ключові слова C ++ або unicode, або пробіли, .
або інші розділові знаки, вбудовані в них
На різних інших мовах є пристрої, що дозволяють створювати ідентифікатори, які не відповідають загальній схемі; наприклад, у Verilog, \abcd
є ідентифікатором, еквівалентним abcd
, але \while
і \23skidoo
та \44.e2
є ідентифікаторами, для чого потрібен префікс зворотної косої риси, щоб його розглядали як такий. Зважаючи на спосіб використання Verilog, важливо взагалі дозволити будь-які імена, де вони стосуються зовнішніх інтерфейсів.