Я не уверен, что полностью понимаю ваш вопрос, но буквальные спецификаторы u
и U
служат только для указания целочисленного типа данных - ничего не говорится о том, что представляет собой символ (или не говоря уже о том, какая кодировка предполагается). Подведем итог:
char a1 = 'a', b1[] = "Hello";
wchar_t a2 = L'a', b2[] = L"Hello";
char16_t a3 = u'\u1234', b3[] = u"Hello \uABCD";
char32_t a4 = U'\U5678ABCD', b4[] = U"Hello \U10325476"; // not actually valid codepoints
Что вы в конечном итоге делаете с этими типами, полностью зависит от вас. Литеральные спецификаторы L
, u
и U
просто позволяют вам помещать литеральные константы в ваш код, и они существуют уже некоторое время (хотя я думаю, что строковый синтаксис u"..."
и U"..."
только официальными в C ++ 0x, как и типы char16_t
и char32_t
, которые являются действительно новыми типами, а не просто псевдонимами).