【发布时间】:2011-12-14 18:05:54
【问题描述】:
我正在阅读C++ FAQ,上面写着
C++ 语言保证一个字节必须始终至少有 8 位
那么这对<cstdint> 类型意味着什么?
附带问题 - 如果我想要一个字节数组,我应该使用 int8_t 还是 char,为什么?
【问题讨论】:
-
从技术上讲,这是一个 C 问题,因为类型参考了 C 标准(第 7.18 节)。
我正在阅读C++ FAQ,上面写着
C++ 语言保证一个字节必须始终至少有 8 位
那么这对<cstdint> 类型意味着什么?
附带问题 - 如果我想要一个字节数组,我应该使用 int8_t 还是 char,为什么?
【问题讨论】:
C++(以及 C)将intX_t(即精确宽度的整数类型)类型定义定义为可选。因此,如果没有正好 8 位宽的可寻址单元,它就不会存在。
如果您想要一个字节数组,您应该使用char,因为sizeof char(以及signed char 和unsigned char)被明确定义为始终为1 个字节。
【讨论】:
添加到 Cat Plus Plus 已经说过的内容(类型是 可选),您可以使用以下内容测试它是否存在:
#ifdef INT8_MAX
// type int8_t exists.
#endif
或更可能:
#ifndef INT8_MAX
#error Machines with bytes that don't have 8 bits aren't supported
#endif
【讨论】:
int8_t并在机器不是每字节8位的情况下在软件中进行计算。
int8_t 应该是基本整数类型之一的 typedef。但我不确定。在具有 9 位 1 的补码的机器(某些 Unisys)上,这样的实现会非常慢。
int。其他任何东西都应该只在特殊情况下使用。