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

0xb*_*00d 12 c++ c++11 char16-t char32-t

这也char32_t和任何有关intXX_t.规范指出:

2.14.3.2:

包含单个c-char的char16_t文字的值等于其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位)?

Mar*_*ork 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不完全相同))).


Fre*_*Foo 5

char16_t包含单个c-char 的文字的值等于其ISO 10646代码点值,前提是代码点可用单个16位代码单元表示.

如果char16_t不是至少16位宽,这是不可能满足的,所以相反,它保证至少是那么宽.