例如string、vector等类型的size函数返回的是一个无符号整型数,如果在表达式中混和使用了带符号数和无符号数,将产生意想不到的结果。
带符号数将自动转换为无符号数,例如-1,由于-1的二进制表示的最高位为1,这回导致size() > -1一定会返回false。在进行判断size()时,还是应该使用0进行比较。
案例
#include<iostream>
#include<string>
using namespace std;
int main(){
string haystack = "";
string needdle = "a";
int i=0;
cout<<haystack.size()<<endl;
cout<<needdle.size()<<endl;
cout<<haystack.size()-needdle.size();
return 0;
}
haystack的长度为0,needle的长度为1,而 无符号的 0减1 时出现了如下情况