从size_t转换为unsigned int

时间:2011-11-05 10:00:07

标签: c++ type-conversion unsigned-integer

是否有可能从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 ++

平台:任何

2 个答案:

答案 0 :(得分:4)

是的,size_tint不一定具有相同的尺寸。实际上,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