C++ 11 представляет новый набор префиксов строковых литералов (и даже позволяет определять суффиксы, заданные пользователем). Кроме того, вы можете напрямую использовать escape-последовательности Unicode для кодирования определенного символа, не беспокоясь о кодировании.Строковые литералы Unicode
const char16_t* s16 = u"\u00DA";
const char32_t* s32 = U"\u00DA";
Но я могу использовать последовательности юникода побега в wchar_t
строковых литералов, а? Казалось бы, это был недостаток, если это было невозможно.
const wchar_t* sw = L"\u00DA";
Целое значение sw[0]
будет, конечно, зависеть от того, что wchar_t
на конкретной платформе, но и ко всем другим эффектам, это должно быть портативным, нет?
Я считаю, что значение 'SW [0]' зависит от того, что 'wchar_t' на конкретной платформе только в той степени, каков размер 'wchar_t'. То есть '\ u00DA' всегда должен приводить к кодировке Unicode (UTF-8, UTF-16, UTF-32) U + 00DA, даже если это не стандартная кодировка платформы для этого типа. – bames53
На самом деле вышеуказанное неверно. Предполагается, что реализация должна рассматривать универсальные имена символов, поскольку это будет буквальный характер. Поэтому, если реализация преобразует символы в строковый литерал в набор символов выполнения, тогда он также должен делать это с UCN. Вам гарантируется только кодировка UTF, если UCN находится внутри литерала unicode (например, u8 "\ u00DA"). – bames53