C++ 什么时候/哪里/为什么尺码不是单位?

C++ 什么时候/哪里/为什么尺码不是单位?,c++,compiler-construction,implementation,size-t,uint,C++,Compiler Construction,Implementation,Size T,Uint,我一直因为使用uint而不是size\u t而受到很多批评,但每次我检查我使用的工具链时都发现size\u t被定义为uint 是否存在size\u t实际上不是uint的编译器实现?这种批评的理由是什么?size\u t是“与机器中可能使用的最大地址范围相匹配的大小”(或大致相同的一些词) 特别是,size\u t在64位机器上为64位,在32位系统上为32位 我假设uint缺少unsigned int,它通常是32位(现在,一些较旧的系统将使用16位整数)。因此,在64位系统上,无符号int

我一直因为使用
uint
而不是
size\u t
而受到很多批评,但每次我检查我使用的工具链时都发现
size\u t
被定义为
uint


是否存在
size\u t
实际上不是
uint
的编译器实现?这种批评的理由是什么?

size\u t
是“与机器中可能使用的最大地址范围相匹配的大小”(或大致相同的一些词)

特别是,
size\u t
在64位机器上为64位,在32位系统上为32位


我假设
uint
缺少
unsigned int
,它通常是32位(现在,一些较旧的系统将使用16位整数)。因此,在64位系统上,
无符号int
仍然是32位,尽管内存分配、字符串等的大小可能大于32位-如果您试图使用
uint
作为大小,这将导致问题

size\u t
是“与您可以在机器中使用的最大地址范围相匹配的大小”(或一些大致相同的单词)

特别是,
size\u t
在64位机器上为64位,在32位系统上为32位



我假设
uint
缺少
unsigned int
,它通常是32位(现在,一些较旧的系统将使用16位整数)。因此,在64位系统上,
无符号int
仍然是32位,尽管内存分配、字符串等的大小可能大于32位-如果您试图使用
uint
作为大小,这将导致问题

什么是“uint”?假设你的意思是无符号整数:你永远不知道未来是由什么组成的
size\u t
标准、优雅、中庸。更好地使用它:)大小\u t使您的代码可移植到每台平板电脑上。计算机将定义自己的大小\u t。使用64位编译器编译您的程序。您可能会收到一些警告。
size\u t
是标准的,
uint
是非标准的。同样在64位体系结构上,
size\u t
将是64位(无符号),而
uint
很容易是32位。什么是“uint”?假设你的意思是无符号整数:你永远不知道未来是由什么组成的
size\u t
标准、优雅、中庸。更好地使用它:)大小\u t使您的代码可移植到每台平板电脑上。计算机将定义自己的大小\u t。使用64位编译器编译您的程序。您可能会收到一些警告。
size\u t
是标准的,
uint
是非标准的。此外,在64位体系结构上,
size\u t
将是64位(无符号),而
uint
很容易是32位。IIRC还需要无符号。size\u t的类型不保证是无符号的,但保证“足够大,可以在系统中进行任何内存分配”。因此它永远不会溢出(除非你“糟糕地”使用它)。@matstpeterson-目前没有64位编译器,但我假设
int
是CPU寄存器宽度,逻辑上,逻辑上与
uint
相同。不是吗?@user2341104:int的初衷确实是匹配自然寄存器大小,接近64位时,许多ABI认为这是一种可怕的浪费,甚至对于64位注册平台也是32位的。在典型的64位系统上,
int
绝对不是64位的(Windows、Linux、MacOS都使用32位
int
,除了Windows之外,
long
是64位的-Windows传统上有大量代码在32位的地方使用
long
,因此他们决定64位值需要
long
).IIRC还要求为unsigned size\u t的类型不保证为unsigned,但保证为“足够大,可用于系统中的任何内存分配”。因此它永远不会溢出(除非您“严重”使用它)@matstpeterson-目前没有64位编译器,但我假设
int
是CPU寄存器的宽度,逻辑上与
uint
相同。不是这样吗?@user2341104:虽然int的初衷确实是匹配自然寄存器大小,但接近64位的许多ABI认为这将是可怕的即使对于64位注册平台,
int
在典型的64位系统中肯定不是64位(Windows、Linux、MacOS都使用32位
int
,除了Windows之外,
long
是64位的-Windows传统上有大量代码在32位的地方使用
long
,因此他们决定64位值需要
long
)。