Как Microsoft обрабатывает тот факт, что UTF-16 является кодировкой переменной длины в своей реализации стандартной библиотеки C ++

Кодирование переменной длины косвенно запрещено стандартом.

Поэтому у меня есть несколько вопросов:

Как обрабатывается следующая часть стандарта?

17.3.2.1.3.3 Последовательности широких символов

Последовательность широких символов - это объект массива (8.3.4) A, который может быть объявлен как TA [N], где T - это тип wchar_t (3.9.1), необязательно квалифицируется любой комбинацией const или volatile. Начальные элементы массива имеют определенное содержимое вплоть до элемента, определенного некоторым предикатом. Последовательность символов может быть обозначена значением указателя S, которое обозначает ее первый элемент.

Длина NTWCS - это количество элементов, которые предшествуют завершающему широкому нулевому символу. Пустая NTWCS имеет длину 0.

Вопросы:

basic_string

  • Как реализован оператор [] и что он возвращает?
    • стандарт: Если pos
  • Возвращает ли size () количество элементов или длину строки?
    • стандарт: Возвращает: количество символьных объектов, находящихся в данный момент в строке.
  • Как работает resize () ?
    • не связано со стандартом, что он делает
  • Как обрабатываются позиции в insert () , erase () и других?

cwctype

  • Здесь почти все. Как обрабатывается кодировка переменной?

cwchar

  • getwchar () , очевидно, не может вернуть весь платформенный символ, так как же это работает?

Плюс ко всем остальным функциям символа ( тема та же).

Edit: Я открою награду, чтобы получить подтверждение. Я хочу получить четкие ответы или, по крайней мере, более четкое распределение голосов.

Редактировать: Это начинает терять смысл. Здесь полно противоречивых ответов. Некоторые из вас говорят о внешних кодировках (меня это не волнует, кодировка UTF-8 по-прежнему будет храниться как UTF-16 после чтения в строку, то же самое для вывода), остальное просто противоречит друг другу. : - /

11
задан pnuts 24 September 2014 в 00:59
поделиться