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,欢迎交流。