Exe-шнік написав:Вибачте, deskription я китайську не розумію
e.g. \U0001f34c
\xF0\x9F\x8D\x8C
\uD83C\uDF4C
що воно за хрінь?
\U0001f34c - це universal character name
\xF0\x9F\x8D\x8C - це arbitrary hexadecimal value
\uD83C\uDF4C - це теж universal character name
universal character name - це представлення символів за межами
основного (стандартного) набору символів.
Стандарт C++ визначає універсальні імена символів, написані як
"\unnnn" і "\Unnnnnnnn", та представляє символи з юнікодівськими
кодовими точками nnnn/nnnnnnnn (де n якесь hex число).
Це корисно для рядкових літералів, тим більше, що літерали
UTF-8, UTF-16 і UCS-4 є явно визначеними.
Однак universal character literals (той же символ банану \U0001f34)
також дозволені в ідентифікаторах*.
*ідентифікатор в С++ - це довільно довга послідовність цифр,
символів підкреслення, малих та великих латинських букв,
а також більшості символів Unicode.
Для чого це було потрібно? Ну, наприклад:
Програми C++ можуть викликати функції, написані іншими мовами.
Це хороша стратегія з боку комітету зі стандартизації, щоб гарантувати,
що C++ буде сумісним з іншими мовами, які можуть дозволяти
не алфавітно-цифрові символи або символи юнікоду в іменах функцій,
навіть якщо такі мови ще не існують. Стандарт не повинен вказувати,
як це буде працювати на рівні лінкера тощо;
але це добре, що є деякий визначений механізм, який дозволяє це.
Щодо arbitrary hexadecimal value або "\xnn", де nn - це просто
послідовність шістнадцяткових цифр, які означають символ з ASCII-кодом nn.