![](/img/trans.png)
[英]Does int32_t have lower latency than int8_t, int16_t and int64_t?
[英]Uses and when to use int16_t,int32_t,int64_t and respectively short int,int,long int,long
使用和何时使用int16_t
、 int32_t
、 int64_t
以及分别为short
、 int
、 long
。
C++ 中该死的类型太多了。对于整数,什么时候使用一个而不是另一个是正确的?
当精度很重要时,使用定义良好的类型。 当它不是时使用不太确定的。 使用更精确的永远不会错。 当您使用灵活的时,有时会导致错误。
当您确实需要精确宽度时,请使用精确宽度类型。 例如, 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 或组织的编码标准强加的,那么这实际上是个人品味的问题。 尽量保持一致。
这是个好问题,但很难回答。
在一行中:这取决于上下文:
我的经验法则:
int16_t,int32_t,int64_t,..
使用int16_t,int32_t,int64_t,..
说明:
在某些情况下使用int
( int
是系统字长)可以为您提供性能,但在其他某些情况下则不然。
我会在unsigned long long
使用uint64_t
,因为它很简洁,但unsigned long long
有可能。
所以这取决于上下文
我发现它们的一个用途是当我为图像压缩器等位打包数据时。 使用这些精确指定字节数的类型可以省去很多麻烦,因为C++ 标准没有明确定义其类型中的字节数,只有 MIN 和 MAX 范围。
在 MISRA-C 2004 和 MISRA-C++ 2008 指南中,建议首选特定长度的类型定义:
指示大小和符号的typedef应该用来代替基本的数字类型。 [...]
此规则有助于明确存储的大小,但由于积分提升的不对称行为,无法保证可移植性。 [...]
char 类型除外:
纯字符类型应仅用于字符值的存储和使用。
但是,请记住 MISRA 指南适用于关键系统。
就个人而言,我遵循这些针对嵌入式系统的指南,而不是针对计算机应用程序,在我需要 integer 时我只是使用int ,让编译器根据需要进行优化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.