Строковый литерал с префиксом u
представляет собой массив const char16_t
значений:
C ++ 17 [lex.string] / 10:
Строка-литерал, который начинается с u
, например u"asdf"
, является строковым литералом char16_t
.Строковый литерал char16_t
имеет тип «массив из n const char16_t
», где n - размер строки, как определено ниже;он инициализируется заданными символами.
Таким образом, литерал в кавычке эквивалентен, в системе Unicode:
const char16_t x[] = { 97, 115, 100, 102, 0 };
Другими словами, представление строкилитерал совпадает с представлением этого массива.
Для более сложной строки это все еще массив const char16_t
;и может быть несколько кодовых точек на c-char , то есть количество элементов в массиве может быть больше, чем количество символов, которые появляются в строке.
Чтобы ответить на вопрос в заголовке: я не знаю ни одного параметра компилятора (для любого компилятора), который позволял бы вам настраивать порядок байтов char16_t
.Я ожидаю, что любая целевая система будет использовать один и тот же порядок байтов для всех целочисленных типов.char16_t
должен иметь те же свойства, что и uint_least16_t
([basic.fundamental] / 5).
Если ваш код содержит строковые литералы и вы хотите записать их в файл, как в частности, UTF16-BEНапример, вам нужно будет выполнить обычные проверки / корректировки порядкового номера в случае, если ваша система хранит char16_t
в формате с прямым порядком байтов.