写代码时遇到vector的size比较,代码片截取修改如下
#include<iostream>
#include<vector>
using namespace std;
int main()
{ vector<int> A;
A = { 2,-1,2 };
int x = A.size() - 4;
if (0<= A.size() - 4) {
cout << "过程执行(本不应执行)" << endl;
}
}
上述过程本不应执行,因为照我们理解
A.size()-4=-1
0>-1
if不成立,则不执行
而实际上A.size()-4不是-1
#include<iostream>
#include<vector>
using namespace std;
int main()
{ vector<int> A;
A = { 2,-1,2 };
int x = A.size() - 4;
if (0<= A.size() - 4) {
cout << A.size() - 4 << endl;
}
}
结果为4294967295
因为A.size()的默认存储形式不是int,而是unsigned int, int为短整型,即有正负数之分,而A.size()不可能为负数,定义成了无符号短整型。所以当求A.size()-4时,默认数据格式跟随,发生下溢。即4294967295
要正常求得A.size()-4时,只需加上
int x = A.size() - 4;
强制类型转换
即
#include<iostream>
#include<vector>
using namespace std;
int main()
{ vector<int> A;
A = { 2,-1,2 };
int x = A.size() - 4;
if (0<= x) {
cout << "过程执行(本不应执行)" << endl;
}
}
可以看到现在过程不执行了