从size_t转换为unsigned int

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

平台:任何

2个回答

4
是的,这是可能的,size_tint不一定有相同的大小。实际上,拥有64位size_t和32位int非常普遍。
C++11草案N3290在§18.2/6中说:
“类型是一个实现定义的无符号整数类型,它足够大,可以包含任何对象的字节数。”
另一方面,unsigned int只需要能够存储从0到UINT_MAX(在<climits>中定义,并遵循C标准头文件<limits.h>),这仅保证至少为65535(216-1)。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接