从 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++
平台:任何
从 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++
平台:任何
是的,这是可能的,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)。
是的,在某些平台上可能会发生溢出。例如,size_t
可以定义为unsigned long
,它可以很容易地大于unsigned int
。