C ++标准是否对char
,wchar_t
,char16_t
,char32_t
的字节大小排序提供了任何保证? (欢迎提供标准的任何摘录)
例如,我是否有以下保证:
sizeof(char) <= sizeof(wchar_t) <= sizeof(char16_t) <= sizeof(char32_t)
答案 0 :(得分:2)
1 == sizeof(char) <= sizeof(wchar_t)
和1 == sizeof(char) <= sizeof(char16_t) <= sizeof(char32_t)
。
5.3.3 / 1 Sizeof [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表示不同的类型 与uint_least16_t和。具有相同的大小,签名和对齐方式 uint_least32_t分别在&lt; cstdint&gt;中调用底层 类型。
更新:我没有在标准中找到它。 cppreference代表uint_leastN_t
:
最小的无符号整数类型,宽度至少为8,16,32和64 位分别
请注意,sizeof(char)== 1 不表示char有8位。另见C++ FAQ。 cppreference说CHAR_BIT:
字节中的位数
1.7 / 1 C ++内存模型[intro.memory]
C ++内存模型中的基本存储单元是字节。一个 byte至少足以包含basic的任何成员 执行字符集(2.3)......
答案 1 :(得分:0)
char16_t
和char32_t
类型的定义分别与uint_least16_t
和uint_least32_t
相同。
wchar_t
上不存在这样的约束,除了它必须至少与char
一样大(当然,对于C中的所有数据类型都是如此和C ++)。存在具有1字节,2字节(MSVC ++)和4字节(GCC)宽字符的实际实现。
答案 2 :(得分:0)
在64位Qt Creator(使用Clang)中,wchar_t
是四(4)个字节。