C ++是否保证cstdint sizeof的排序?

时间:2015-12-06 21:29:20

标签: c++ c++11 integer standards sizeof

C ++标准是否保证:

sizeof(uint8_t) <= sizeof(uint16_t) <= sizeof(uint32_t) <= sizeof(uint64_t)
sizeof(uint_least8_t) <= sizeof(uint_least16_t) <= sizeof(uint_least32_t) <= sizeof(uint_least64_t)
sizeof(uint_fast8_t) <= sizeof(uint_fast16_t) <= sizeof(uint_fast32_t) <= sizeof(uint_fast64_t)

如果没有,它提供什么保证? (欢迎提取标准)

1 个答案:

答案 0 :(得分:5)

如果存在这些类型,第一个是有保证的。 (如果系统无法提供它们,它们可能不存在。)

第二个least得到保证。以下是未签名案例的文本(签名文本类似):

  

typedef名称uint_leastN_t指定带宽度的无符号整数类型   至少为N的,使得没有具有较小尺寸的无符号整数类型至少具有指定的   宽度。

第三个,fast:它似乎没有明确指定,但它说:

  

typedef名称int_fastN_t指定宽度至少为N的最快有符号整数类型

如果我们假设这个文本是字面意思,那么它将给予保证;虽然相关的脚注表明编译器有更多的自由度。然而,实现似乎不太可能像make fast16_t那样是64位,而fast32_t是32位。

NB。这些引用来自ISO C99,C ++标准引用了这些定义。