将size_t转换为unsigned int

converting from size_t to unsigned int

本文关键字:unsigned int 转换 size      更新时间:2023-10-16

从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++

平台:any

是的,这是可能的,size_tint不一定有相同的大小。实际上,64位size_t s和32位int s是很常见的。

c++ 11草案N3290在§18.2/6中说:

类型size_t是一个实现定义的无符号整数类型,其大到足以包含任何对象的字节大小。

另一方面,

unsigned int只需要能够存储从0到UINT_MAX的值(在<climits>中定义并遵循C标准头<limits.h>),仅保证至少为65535 (216-1)。

是的,在某些平台上可能会发生溢出。例如,size_t可以定义为unsigned long,它可以很容易地大于unsigned int

相关文章: