C ++ От чего зависит размер char16_t? - PullRequest
12 голосов
/ 22 июня 2011

Это также относится к 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).

Если char16_t не гарантированно будет 2 байта, то гарантированно ли оно будет 16-битным (даже на архитектурах, где 1 байт! = 8 бит)?

Ответы [ 3 ]

12 голосов
/ 22 июня 2011

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))).

5 голосов
/ 22 июня 2011

Значение литерала char16_t, содержащего один символ c-char, равно значению его кодовой точки ISO 10646, при условии, что кодовая точка представляется с помощью одной 16-битной кодовой единицы.

Этого невозможно удовлетворить, если char16_t имеет ширину не менее 16 бит, поэтому, в отличие от этого, гарантированно будет как минимум такой ширины.

2 голосов
/ 22 июня 2011

Нельзя гарантировать, что он будет ровно 16 бит, поскольку существуют платформы, которые не поддерживают такие малые типы (например, DSP часто не могут адресовать что-либо меньшее, чем их размер слова, который может быть 24, 32).или 64 бита).Ваша первая цитата гарантирует, что она будет не менее 16 бит.

...