使用和何时使用int16_t,int32_t,int64_t和short int,int,long int,long

时间:2016-08-10 01:00:07

标签: c++ types integer

使用以及何时使用int16_tint32_tint64_tshortintlong
C ++中有太多该死的类型。对于整数,何时使用一个而不是另一个?

4 个答案:

答案 0 :(得分:6)

精度很重要时使用明确定义的类型。如果不是,则使用不太确定的那些。使用更精确的那些从来都不错。当您使用灵活的错误时,它有时会导致错误。

答案 1 :(得分:3)

当您确实需要精确的宽度时,请使用精确宽度类型。例如,int32_t保证正好是32位宽,没有填充位,并且具有二进制补码表示。如果您需要所有这些要求(可能是因为它们是由外部数据格式强加的),请使用int32_t。同样适用于其他[u]intN_t类型。

如果您只需要一个有符号整数类型的至少 32位,请使用int_least32_tint_fast32_t,具体取决于您是要优化大小还是速度。 (它们可能是同一类型。)

使用预定义类型shortintlong等等,当它们足够好用于您的目的并且您不想使用更长的名称时。 shortint都保证至少为16位,long至少为32位,long long至少为64位。 int通常是系统架构建议的“自然”整数类型;您可以将其视为int_fast16_t,将long视为int_fast32_t,但不能保证它们相同。

我没有给出使用内置与[u]int_leastN_t[u]int_fastN_t类型的确切标准,因为坦率地说,没有这样的标准。如果您使用的API或您组织的编码标准没有强加选择,那么这真的是个人品味的问题。试着保持一致。

答案 2 :(得分:3)

这是一个很好的问题,但很难回答 在一行中:这取决于上下文:

我的经验法则:

  • 我更喜欢代码性能(速度:更少的时间,然后更少的复杂性)
  • 使用现有库时,我遵循库编码风格(上下文)。
  • 在团队编码时,我遵循团队编码风格(上下文)。
  • 在编写新内容时,我会尽可能使用int16_t,int32_t,int64_t,..

说明:

在某些上下文中使用intint是系统字大小)可以提高性能,但在其他情况下则不能。

我使用uint64_t而不是unsigned long long,因为它简洁,但有可能。

所以这取决于上下文

答案 3 :(得分:0)

我发现它们的用途是当我对图像压缩器的数据进行位打包时。使用这些类型来精确指定字节数可以节省很多麻烦,因为the C++ standard does not explicitly define the number of bytes in its types, only the MIN and MAX ranges.