3

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

平台:任何

4

2 回答 2

4

是的,这是可能的,size_t并且int不一定具有相同的大小。有 64bitsize_t和 32bit实际上很常见int

C++11 草案 N3290 在 §18.2/6 中说明了这一点:

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

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

于 2011-11-05T10:02:59.380 回答
1

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

于 2011-11-05T10:03:53.977 回答