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

问题描述 投票:0回答:1

所以我偶然发现我应该何时使用 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
代替。

c++ fixed-width
1个回答
4
投票

使用

std::uint_fast16_t
而不是说
unsigned int
有什么缺点吗?

一个缺点:由于通常的促销活动,类型不确定。

uint16_fast_t
是否转换为 signedunsigned

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

© www.soinside.com 2019 - 2024. All rights reserved.