int8_t
、int16_t
、int32_t
和int64_t
是有符号整数类型,宽度分别为 8、16、32 和 64 位,没有填充位,并且对负值使用 2 的补码(仅在实现直接支持该类型时提供)。
int_least8_t
、int_least16_t
、int_least32_t
、 和int_least64_t
是最小有符号整数类型,宽度分别至少为 8、16、32 和 64 位。
如果一个实现有 int8_t
,那么它看起来像是 的自然选择int_least8_t
,因为它是宽度至少为 8 的类型。但是,例如在 LLP64 数据模型上 和int
都是long
32 位,所以int32_t
可能是int
但int_least32_t
可能是long
,这将是令人困惑,但它有效吗?
我可以合理地预期int_least32_t
( 和char32_t
) 和int32_t
是同一类型吗?是否有 int_leastX_t 与 intX_t 不同的实际实现?(死亡站 9000除外)
Not
char32_t
,它被指定为与 相同的类型uint_least32_t
。int32_t
这绝对与or不是同一类型int_least32_t
。您已经提出了这样的情况:如果一致的实现定义了
int32_t
,那么该类型必然是 的候选类型int_least32_t
,但它不一定是唯一的候选类型。那么假设所有此类实现将它们定义为相同类型是否合理?如果您的目标之一是编写严格一致的代码,或者至少尽量减少不必要的假设,那么当然不是。否则,那就是见仁见智了。鉴于您首先注意到它可能很重要,并且您正在考虑可移植性,我倾向于猜测您属于前一个阵营。
我确实认为在这种情况下,实现不太可能为
int32_t
和选择不同的类型int_least32_t
,但这是一个不同的问题。我不知道有这样一个,但我没有任何特别的理由认为没有这样一个。我本人坚定地站在最小化假设阵营,所以我不关心任何这些标准 typedef 背后的实际类型,并且我不编写依赖于这些定义的代码。
即使今天没有这样的实施,将来也可能会有。