[英]Why does converting from a size_t to an unsigned int give me a warning?
[英]converting from size_t to unsigned int
从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
不一定具有相同的大小。 具有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)。
是的,在某些平台上可能会发生溢出。 例如,可以将size_t
定义为unsigned long
,它可以轻松地大于unsigned int
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.