12

这也与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)的评论之外,我看不到有关这些类型的任何信息。

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

4

3 回答 3

11

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 不完全相同)))。

于 2011-06-22T13:50:42.283 回答
5

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

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

于 2011-06-22T13:48:40.063 回答
2

不能保证正好是 16 位,因为有些平台不支持那么小的类型(例如,DSP 通常无法处理小于其字长的任何内容,可能是 24、32 或 64 位)。您的第一个报价保证它将至少为 16 位。

于 2011-06-22T13:54:26.567 回答