这也与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位)?
答案 0 :(得分:12)
类型char16_t和char32_t分别表示与uint_least16_t和uint_least32_t相同的大小,符号和对齐的不同类型,称为基础类型。
这意味着char16_t至少为16位(但可能更大)
但我也相信:
包含单个c-char的char16_t文字的值等于其ISO 10646代码点值,前提是代码点可用单个16位代码单元表示。
提供相同的保证(虽然不太明确(因为您必须知道ISO 10646是UCS(注意UCS是兼容的,但与Unicode不完全相同))。)。
答案 1 :(得分:5)
包含单个c-char的
char16_t
文字的值等于其ISO 10646代码点值,前提是代码点可用单个16位代码单元表示。
如果char16_t
不是至少16位宽,这是不可能满足的,所以矛盾的是,它保证至少那么宽。
答案 2 :(得分:2)
不能保证恰好是16位,因为有些平台不支持小型的(例如,DSP通常不能处理小于其字大小的任何东西,可能是24,32或64位)。您的第一个引用保证它至少为16位。