使用以及何时使用int16_t
,int32_t
,int64_t
和short
,int
,long
。
C ++中有太多该死的类型。对于整数,何时使用一个而不是另一个?
答案 0 :(得分:6)
精度很重要时使用明确定义的类型。如果不是,则使用不太确定的那些。使用更精确的那些从来都不错。当您使用灵活的错误时,它有时会导致错误。
答案 1 :(得分:3)
当您确实需要精确的宽度时,请使用精确宽度类型。例如,int32_t
保证正好是32位宽,没有填充位,并且具有二进制补码表示。如果您需要所有这些要求(可能是因为它们是由外部数据格式强加的),请使用int32_t
。同样适用于其他[u]intN_t
类型。
如果您只需要一个有符号整数类型的至少 32位,请使用int_least32_t
或int_fast32_t
,具体取决于您是要优化大小还是速度。 (它们可能是同一类型。)
使用预定义类型short
,int
,long
等等,当它们足够好用于您的目的并且您不想使用更长的名称时。 short
和int
都保证至少为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,..
。说明:
在某些上下文中使用int
(int
是系统字大小)可以提高性能,但在其他情况下则不能。
我使用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.