保证对char,wchar_t,char16_t,char32_t的大小排序

时间:2015-12-06 20:38:37

标签: c++ c++11 character sizeof widechar

C ++标准是否对charwchar_tchar16_tchar32_t的字节大小排序提供了任何保证? (欢迎提供标准的任何摘录)

例如,我是否有以下保证:

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

3 个答案:

答案 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++ FAQcppreference说CHAR_BIT:

  

字节中的位数

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

  

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

答案 1 :(得分:0)

char16_tchar32_t类型的定义分别与uint_least16_tuint_least32_t相同。

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

答案 2 :(得分:0)

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