C++11有类似quint8的东西吗?

5

Qt 中有一些类型,例如 quint8,在 Qt 支持的所有平台上都保证为 8 位。

我想知道 C++11 是否有这种类型?如果没有,那么替代方案是什么?

谢谢。


2
在程序中,可以使用stdint.h中定义的类型来解决这个问题吗? - Gluttton
1
是的,它会检查http://www.cplusplus.com/reference/cstdint/。 - 101010
1
这一定是某个东西的副本。 - Cole Tobin
1
@ColeJohnson:如果搜索问题没有找到任何结果,请尝试搜索显而易见的答案。我在https://dev59.com/gmIj5IYBdhLWcg3weE4J上找到了答案。 - MSalters
2个回答

14

是的,C++11添加了具有更精确定义大小的类型。这是参考文献

它们在<cstdint>中定义。

您可以保证拥有这些类型:

intmax_t        uintmax_t

int_least8_t    uint_least8_t
int_least16_t   uint_least16_t
int_least32_t   uint_least32_t
int_least64_t   uint_least64_t

int_fast8_t     uint_fast8_t
int_fast16_t    uint_fast16_t
int_fast32_t    uint_fast32_t
int_fast64_t    uint_fast64_t

你可能有,也可能没有这些东西:

int8_t          uint8_t 
int16_t         uint16_t
int32_t         uint32_t
int64_t         uint64_t

intptr_t        uintptr_t

解释:

  • u前缀表示无符号。
  • least变种是至少具有该宽度的最小整数类型。
  • fast变种是至少具有该宽度的最快整数类型。
  • intptr变种保证可转换为void*,并且可以恢复。
  • max变种是最大的可用类型。

解释:

  • u前缀表示无符号。
  • least变种是至少具有该宽度的最小整数类型。
  • fast变种是至少具有该宽度的最快整数类型。
  • intptr变种保证可转换为void*,并且可以恢复。
  • max变种是最大的可用类型。

1
@cimano:“至少和指定宽度的其他整数类型一样快。” - Lstor
1
@camino 这个类型只保证了一定的最小长度,但如果在特定平台上使用更长的类型会更"快速"处理,那么就会被使用。 - Kuba hasn't forgotten Monica
1
据我所知,编译器不能保证具有这些。它们只需要具有这种形式的typedef,而不是具体的typedef。除非标准发生了变化。 - Cole Tobin
1
我想说的是,你声称“你_保证_拥有”(重点在于我)是错误的。 - Cole Tobin
1
@FinalContest:我不敢苟同,我认为他读取 quint8 部分只是作为示例而非他所需的完整列表。此外,列出所有类型对于未来的谷歌搜索者更有用。由于 OP 明确询问 C++11 是否支持这些类型,我推断他已经意识到了限制并且拥有 C++11 的支持。 - Lstor
显示剩余6条评论

1

是的,它可以做到,甚至更多。 从文档中可以看出:

uint8_t unsigned integer type with width of 8
uint_fast8_t fastest unsigned integer type with width of 8
uint_least8_t smallest unsigned integer type with width of at least 8

免责声明:这显然无法在支持Qt但不支持C++11的平台上运行。如果你计划支持这些平台,请继续使用quint8,否则请放弃它并转向现代C++。
请确保将以下内容添加到您的qmake项目文件中以实际启用C++11:
CONFIG += c++11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接