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)
如果没有,它提供什么保证? (欢迎提取标准)
答案 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 ++标准引用了这些定义。