对于一般用途的整数,我应该使用什么数据类型?

What data type should I use for a general purpose integer?

本文关键字:什么 数据类型 我应该 一般用 整数      更新时间:2023-10-16

c++中通用整数应该使用什么数据类型?

明显的答案是int,这在以前是有意义的,通常在16位机器上是16位,在32位机器上是32位。但是现在64位代码变得越来越普遍,但是int在这些编译器上通常是32位的。因此,我们不能再假设int一定是该系统中"最快"或最大的类型。

另一个问题是从数据结构和文件的大小传播64位值。我知道你可以把这些值存储在32位整型中,如果大小不太大的话。但我想写的代码可以处理最大的数据量,如果这是用户想要的。如果用户打开一个5gb的文件并希望整个文件都在内存中,我不希望我的代码死亡,因为大小存储在某个地方的int中。总有一天,16+gb的内存系统会成为标准,我希望我的代码仍然可以工作。

我知道有像vector<T>::size_type这样的类型来存储数据。但是,如果大小数据可以来自几个不同的容器和流类型呢?对于所有可能存储大小信息的整数,我应该使用size_t吗?

所以我不得不得出结论,对于一般用途,我应该使用size_t数据类型(或有符号的等效数据类型,目前每个数据结构最多可以使用9,223,372,036,854,775,807字节),而不是int,但这不是我在实践中观察到的,int仍然被普遍使用。

对于一般用途的计算,我应该使用哪种整数数据类型?这样做的技术原因是什么?

根据具体情况使用不同的整数。一般来说,有两大类整数——一类与你的程序建模的数据(即领域数据)有关,另一类与程序本身的构造有关。

来自程序域的整数(例如用户数据,程序收集或计算的数据,等等)应该用提供特定大小的类型来表示。在c++中,这些类型在<cstdint>头文件中定义。例如,如果您需要在所有平台上可移植的带符号32位类型,请使用int32_t;如果需要64位无符号数,使用uint64_t,等等。

如果你关心的是执行速度,使用带有fastN_t后缀的整数类型,例如uint_fast16_t表示快速的16位无符号整数。

在取数据结构的大小或减去指针时创建与程序构造相关的整数。大小使用size_t,指针差异使用ptrdiff_t

int为"通用"。您应该使用int,除非有理由不这样做。事实上,您使用int以外的任何东西都是向阅读您的代码的人发出信号,表明您没有进行"通用计算"。甚至在标准中也这么说,

普通的int s具有自然大小的建议执行环境的体系结构44;提供其他有符号整数类型以满足特殊需求。

如果你正在索引一个可能非常大的文件,你就不再进行通用计算了。fseek接受类型为long的实参,而不是int。您将使用long不是因为它是正确的"通用"整数类型,而是因为您有"特殊需要"。

如果你使用longlong long的所有东西,那么你会混淆人们。