对于一般用途的整数,我应该使用什么数据类型?
What data type should I use for a general purpose integer?
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
不是因为它是正确的"通用"整数类型,而是因为您有"特殊需要"。
如果你使用long
或long long
的所有东西,那么你会混淆人们。
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 数据类型"struct seq<0, 1, 2>{}"含义是什么?
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- 在C++中,运算符 sizeof 返回什么数据类型?
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 什么是 16 字节有符号整数数据类型?
- RSA_verify中预期的数据类型是什么,无法验证从 Java 生成的签名
- 在C 中,对Pair类STL的用途是什么,就像数据类型或容器一样
- 字符串中单个字符作为数组的数据类型是什么
- 什么是在C 中存储结果INT*的最佳数据类型
- 如果我获得Integer和Double的产品,输出的数据类型是什么
- 通过插座发送的内容的数据类型是什么
- 创建 Timer 类时,我应该使用什么数据类型来保存值?(C/C++)
- C++什么数据类型是thread_id,它能分配给变量吗
- 什么数据类型是 16 位操作系统中的 32 位和 32 位操作系统中的 64 位
- 使用二进制数据块时,在C++中应该使用什么数据类型
- 对于一般用途的整数,我应该使用什么数据类型?
- 什么数据类型可以存储100的阶乘?
- 在知道变量是什么数据类型之前如何声明它
- 我必须使用什么C数据类型