所以我偶然发现我应该何时使用 C++ 固定宽度整数类型以及它们如何影响性能?和我应该使用 cstdint吗?其中
<cstdint>
中定义的固定宽度整数类型的优点和缺点是已列出。
我确实喜欢将变量的预期范围编码为其类型,但我也不想强制 CPU 执行额外的操作,只是为了在我不严格时使用
uint16_t
而不是普通的 int
需要有一个恰好保存 16 位的变量。
我还阅读了诸如
std::uint_fast16_t
等类型。根据我的理解,使用这种类型应该确保我能够在该变量中存储 16 位数字,但我永远不必为使用这种类型付出任何运行时惩罚,因为在每个体系结构上,例如uint32_t
会更快,我会自动使用它。
这给我留下了一个问题:除了我确实需要一个精确位宽的变量的情况之外,使用
std::uint_fast16_t
而不是说 unsigned int
有什么缺点吗?
编辑:这当然是假设内存消耗不是问题。如果是的话,我会用
std::uint_least16_t
代替。
使用
而不是说
std::uint_fast16_t
有什么缺点吗?
unsigned int
一个缺点:由于通常的促销活动,类型不确定。
uint16_fast_t
是否转换为 signed 或 unsigned?
uint_fast16_t fa = 1;
unsigned un = 1;
int i;
fa some_operator i --> may result in an `int` or `uint_fast16_t`
un some_operator i --> result is unsigned.
模糊性可能会对更复杂的方程和溢出行为产生负面影响。
IMO,
uint16_fast_t
仅在狭窄的受控代码中有用,不适用于一般性能改进。小心过早优化真的是万恶之源吗?.
许多因素都会影响这个结论,但一般来说,为了性能,通常最好为了清晰起见并键入
unsigned
。