所以我偶然发现了什么时候应该使用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有什么缺点吗。
一个缺点:不确定的类型由于做通常的促销。 模糊性可能会对更复杂的方程和溢出行为产生负面影响。 IMO, 许多因素会影响这一结论,但通常为了性能,通常最好是为了清晰起见,并键入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.
uint16_fast_t
仅适用于窄控制码,不适用于一般性能改进。小心过早优化真的是万恶之源吗?。unsigned
。