记录size_t和int类型变量比较异常的问题

23 篇文章 2 订阅

1.问题

摘取代码如下, 第2行代码执行返回true,开始我是震惊的,然后看了看代码就冷静了,=-=!

int count = -2;
if (++count > lstPoint.size())  //会判断为true
   throw exception("failed to get visible vertex.");

2.分析

size_t 是无符号的,如果将一个 size_t 值赋值给 int,在值较大时可能会导致溢出。

同样地,如果将负数的 int 值赋给 size_t,则会出现意外的转换,负数将被解释为一个非常大的正数。 

在上述代码中int和size_t类型的比较时,编译器默认把int变量转为了size_t类型,可能是所谓的向下兼容,因为size_t范围比int范围要大,但这样的转化可能出现超出预期的异常问题发生。

3.处理办法

所以出现了开头所述的“问题”,处理代码如下,问题解决。

int count = -2;
if (++count > (int)lstPoint.size())  //会判断为true
   throw exception("failed to get visible vertex.");

在进行int和size_t类型的比较时要小心,可能会有上面几个问题,具体处理办法需要根据场景进行分析确定。

图形几何、数据处理、并行计算相关研究和研发,公众号:geometrylib,欢迎交流。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值