寫代碼時遇到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;
}
}
可以看到現在過程不執行了