1. 问题点
使用abs
时发现结果不如预期,代码如下:
size_t i = 0, j=1;
if (abs(i-j) == 1)
cout<<"1"<<endl;
else if (abs(i-j) > 1)
cout<<">1"<<endl;
输出">1",而不是预期的"1"
2. 分析
size_t
为long unsigned int
, 上述代码中i-j
结果为-1
,但由于数据类型为无符号整数,会转化为一个很大的整数,导致输出结果为>1
。
其实使用std::abs(i-j)
时,编译器会直接报错,也会发现问题所在。