根据C++规范
一个字节至少足够大,可以包含基本的任何成员 执行字符集 (2.3) 和 Unicode UTF-8 编码形式,由连续序列组成 位数,其数量由实现定义。
这意味着,一个字节中的位数必须为 8 位或大于 8 位。
现在,根据 gcc,位数由 ABI 确定。
https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Characters-implementation.html#Characters-implementation
4.4 角色
字节中的位数(C90 3.4、C99 和 C11 3.6)。
由 ABI 确定
海湾合作委员会基于 ABI - http://itanium-cxx-abi.github.io/cxx-abi/
谁能指出我提到字节位数的位置?
C++标准(因此大多数编译器)实际上只保证char
至少是 8 个连续位。对于任何特定的编译,实际位数取决于目标 CPU 体系结构。
但是,在大多数情况下,您必须非常努力地找到没有 8 位字节的目标 CPU。
如果您必须编写依赖于 8 位字节假设的代码,则始终可以static_assert(CHAR_BIT == 8)
以防止任何违反假设的编译。
谁能指出我提到字节位数的位置?
从学究上讲,事实并非如此。该特定 ABI 始终使用"字节"代替"八位字节";在现代,"字节"是"八位字节"的常见同义词,因为使用的绝大多数系统都有 8 位字节。
它确实是这样说的:
通常,本文档是作为通用规范编写的,可供各种体系结构上的C++实现使用。但是,它确实包含安腾 64 位 ABI 的处理器特定材料,并以此标识。在描述结构化数据布局的地方,我们通常假设安腾 psABI 成员大小。
...安腾芯片都有8位字节。
如果您使用的是其他芯片,并且它的每字节位数不同,并且您找到了针对该芯片的编译器,那么您就有了替代答案。(但它没有,你也没有。
这里实际上没有任何解释的余地,即使没有直接说明位和字节之间的关系。
如果我感到特别偏执,我偶尔会写一篇static_assert(CHAR_BIT == 8)
。总的来说,你可以依靠这一点,除非你的目标是一些真正异国情调的东西。