是否有可能从size_t转换为unsigned int导致溢出。
size_t x = foo ( ) ; // foo ( ) returns a value in type size_t
unsigned int ux = (unsigned int ) x ;
ux == x // Is result of that line always 1 ?
语言:c ++
平台:任何
答案 0 :(得分:4)
是的,size_t
和int
不一定具有相同的尺寸。实际上,64位size_t
和32位int
是非常常见的。
C ++ 11草案N3290在§18.2/ 6中说明了这一点:
另一方面,类型 size_t 是一个实现定义的无符号整数类型,其大小足以包含任何对象的字节大小。
unsigned int
只需要能够存储从0到UINT_MAX
的值(在<climits>
中定义并遵循C标准头<limits.h>
),仅保证至少为65535(2 16 -1)。
答案 1 :(得分:1)
是的,在某些平台上可能会发生溢出。例如,size_t
可以定义为unsigned long
,可以很容易地大于unsigned int
。