С++ С чем зависит размер char16_t?
Это также относится к char32_t
и любому intXX_t
. В спецификации указывается, что:
2.14.3.2
:
Значение символа char16_t содержащий единственный c- char, равен его значение кодовой точки ISO 10646, при условии, что кодовая точка представляемый с помощью одного 16-битного кода.
5.3.3.1
:
[..], в частности [..] sizeof (char16_t), sizeof (char32_t), и sizeof (wchar_t) являются определяется реализацией
Я ничего не вижу о типах intXX_t
, кроме комментария, что они являются "необязательными" (18.4.1
).
Если a char16_t
не гарантированно будет 2 байта, гарантировано ли оно 16 бит (даже на архитектурах, где 1 байт!= 8 бит)?
Ответы
Ответ 1
3.9.1 Основные типы [basic.fundamental]
Типы char16_t и char32_t обозначают разные типы с одинаковым размером, подписью и выравниванием как uint_least16_t и uint_least32_t, соответственно, в, называемые базовыми типами.
Это означает, что char16_t имеет не менее 16 бит (но может быть больше)
Но я также считаю:
Значение литерала char16_t, содержащего один c- char, равно его значению кодовой точки по ISO 10646. При условии, что кодовая точка представляется с одним 16-битным блоком кода.
предоставляет те же гарантии (хотя и менее явно (поскольку вы должны знать, что ISO 10646 является UCS (примечание UCS совместимо, но не точно такое же, как Unicode)).
Ответ 2
Значение литерала char16_t
, содержащего один c- char, равно его значению кодовой точки по стандарту ISO 10646. При условии, что кодовая точка представляется с одним 16-битным блоком кода.
Это невозможно удовлетворить, если char16_t
не имеет ширины не менее 16 бит, поэтому, в противоположность этому, оно гарантировано, по крайней мере, настолько велико.
Ответ 3
Не может быть гарантировано ровно 16 бит, так как есть платформы, которые не поддерживают типы, которые малы (например, DSP часто не могут адресовать что-либо меньшее, чем их размер слова, который может быть 24, 32 или 64 бита). Ваша первая цитата гарантирует, что она будет не менее 16 бит.