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
)。