3

charC++ 标准是否对, wchar_t, char16_t,的字节大小排序提供任何保证char32_t?(欢迎从标准中提取任何内容)

例如,我是否可以保证:

sizeof(char) <= sizeof(wchar_t) <= sizeof(char16_t) <= sizeof(char32_t)
4

3 回答 3

2

1 == sizeof(char) <= sizeof(wchar_t)1 == sizeof(char) <= sizeof(char16_t) <= sizeof(char32_t)

5.3.3/1 大小 [expr.sizeof]

... sizeof(char)、sizeof(signed char) 和 sizeof(unsigned char) 为 1。 ... [ 注意:特别是 sizeof(bool)、sizeof(char16_t)、sizeof(char32_t) 和 sizeof(wchar_t ) 是实现定义的。75 — 结束注释]。

3.9.1/5 基本类型 [basic.fundamental]

... wchar_t 类型应具有与其他整数类型之一相同的大小、符号和对齐要求 (3.11),称为其基础类型。类型 char16_t 和 char32_t 分别表示与 <cstdint> 中的 uint_least16_t 和 uint_least32_t 具有相同大小、符号和对齐方式的不同类型,称为基础类型。

更新:我没有在标准中找到它。cppreferenceuint_leastN_t

宽度分别至少为 8、16、32 和 64 位的最小无符号整数类型

请注意, sizeof(char)==1 并不意味着char 有 8 位。另请参阅C++ 常见问题解答cppreference说关于 CHAR_BIT:

字节中的位数

1.7/1 C++ 内存模型 [intro.memory]

C++ 内存模型中的基本存储单元是字节。一个字节至少足够大以包含基本执行字符集(2.3)的任何成员......

于 2015-12-06T21:09:07.120 回答
0

在 64 位 Qt Creator(使用 Clang)中,wchar_t是四 (4) 个字节。

于 2019-06-25T16:36:26.723 回答
0

类型char16_tchar32_t分别定义为与 和 相同的uint_least16_t大小uint_least32_t

上不存在这样的约束wchar_t,除了它必须至少与 一样大char(当然,对于C 和 C++ 中的所有数据类型都是如此)。存在具有 1 字节、2 字节 (MSVC++) 和 4 字节 (GCC) 宽字符的实际实现。

于 2015-12-06T20:48:46.640 回答