C ++ char16_t的大小取决于什么?

时间:2011-06-22 13:40:01

标签: c++ c++11 char16-t char32-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)。

如果char16_t不能保证为2个字节,那么它是否保证为16位(即使在1字节的架构上!= 8位)?

3 个答案:

答案 0 :(得分:12)

3.9.1基本类型[basic.fundamental]

  

类型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位。