根据C ++规范
一个字节至少大到足以包含基本的任何成员 执行字符集(2.3)和8位代码单元 Unicode UTF-8编码形式,由连续序列组成 的位数,其数量由实现定义。
这意味着一个字节中的位数必须为8位或大于8位。
现在,根据gcc,位数由ABI确定。
4.4个字符
一个字节(C90 3.4,C99和C11 3.6)中的位数。
由ABI确定
GCC基于ABI-http://itanium-cxx-abi.github.io/cxx-abi/
谁能指出我提到字节中位数的位置?
答案 0 :(得分:4)
C ++标准(因此是大多数编译器)实际上仅保证char
至少 8个连续位。对于任何特定的编译,实际位数取决于目标CPU架构。
但是,在大多数情况下,您将不得不努力找到不具有8位字节的目标CPU。
如果您必须编写依赖于8位字节的假设的代码,则始终可以static_assert(CHAR_BIT == 8)
来防止任何违反假设的编译。
答案 1 :(得分:4)
谁能指出我提到字节中位数的位置?
从本质上讲不是。该特定的ABI始终使用“字节”代替“八位字节”;在现代时代,“字节”是“八位字节”的常见同义词,因为使用的绝大多数系统都具有8位字节。
它确实是这样说的:
通常,本文档是作为通用规范编写的,可用于各种体系结构上的C ++实现。但是,它确实包含用于Itanium 64位ABI的特定于处理器的材料,因此已确定。在描述结构化数据布局的地方,我们通常采用Itanium psABI成员大小。
...并且Itanium芯片都具有8位字节。
如果您正在使用其他芯片,并且每个字节具有不同的位数,并且找到了针对该芯片的编译器,那么您将拥有替代答案。 (但这不是,您也没有。)
即使没有明确说明位和字节之间的关系,这里实际上也没有解释的空间。
如果我感到特别偏执,我会偶尔写static_assert(CHAR_BIT == 8)
。总体而言,除非您的目标不是真正的异国情调,否则您都可以依靠它。