保证在char、wchar_t、char16_t和char32_t上进行大小排序
Guarantee on size ordering on char, wchar_t, char16_t, char32_t
C++标准是否对char
、wchar_t
、char16_t
、char32_t
的字节大小排序提供任何保证?(欢迎从标准中提取任何内容)
例如,我有保证吗:
sizeof(char) <= sizeof(wchar_t) <= sizeof(char16_t) <= sizeof(char32_t)
它是1 == sizeof(char) <= sizeof(wchar_t)
和1 == sizeof(char) <= sizeof(char16_t) <= sizeof(char32_t)
。
5.3.3/1 的尺寸
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基本类型[基本.基本]
wchar_t类型应具有相同的大小、标记和对齐方式需求(3.11)作为其他积分类型之一,称为底层类型。类型char16_t和char32_t表示不同的类型具有与uint_list16_t相同的大小、签名性和对齐方式,并且uint_list32_t,分别在<cstilth>,称为底层类型。
更新:我还没有在标准中找到它。cppreference表示uint_leastN_t
:
宽度至少为8、16、32和64的最小无符号整数类型位分别
请注意,sizeof(char)==1并不意味着而意味着一个char有8位。另请参阅C++常见问题解答。cppreference说关于CHAR_BIT:
字节中的位数
1.7/1 C++内存模型[interro.memory]
C++内存模型中的基本存储单元是字节。A.字节至少足够大,可以包含基本执行字符集(2.3)…
类型char16_t
和char32_t
被定义为分别与uint_least16_t
和uint_least32_t
大小相同。
wchar_t
上不存在这样的约束,只是它必须至少与char
一样大(当然,对于C和C++中的所有数据类型都是如此)。存在具有1字节、2字节(MSVC++)和4字节(GCC)宽字符的实际实现。
在64位Qt Creator(使用Clang)中,wchar_t
是四(4)个字节。
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序