C++:使用std::uint_fastn_t的缺点



所以我偶然发现了什么时候应该使用C++固定宽度整数类型,以及它们如何影响性能?我应该使用cstil力吗?其中列出了CCD_ 1中定义的固定宽度整数类型的优点和缺点。

我确实喜欢将变量的预期范围编码为其类型,但我也不想强制CPU执行额外的操作,只为了使用uint16_t而不是普通的int,因为我不严格要求变量恰好包含16位。

我也读过std::uint_fast16_t等类型。根据我的理解,使用这种类型应该确保我能够在该变量中存储16位数字,但我永远不应该因为使用这种类型而支付任何运行时惩罚,因为在每个架构上,例如uint32_t会更快,它会自动为我使用。

这给我留下了一个问题:除了我真的需要一个精确位宽的变量之外,使用std::uint_fast16_t而不是unsigned int有什么缺点吗?


EDIT:这当然是假设内存消耗不是问题。如果是的话,我会使用std::uint_least16_t

使用std::uint_fast16_t而不是<cstdint>0有什么缺点吗。

一个缺点:不确定的类型由于做通常的促销。uint16_fast_t是否转换为有符号无符号

uint16_fast_t fa = 1;
unsigned un = 1;
int i;
fa some_operator i --> may result in an `int` or `uint16_fast_t`
un some_operator i --> result is unsigned.

模糊性可能会对更复杂的方程和溢出行为产生负面影响。


IMO,uint16_fast_t仅适用于窄控制码,不适用于一般性能改进。小心过早优化真的是万恶之源吗?。

许多因素会影响这一结论,但通常为了性能,通常最好是为了清晰起见,并键入unsigned

相关内容

  • 没有找到相关文章

最新更新