记一记 今天遇到的小问题。
string a = "abc";
式一:for(int i = 0; i < a.size()-4; i++){}
式二:for(int i = 0; i < (int)a.size()-4; i++){}
这里a.size()=3,一开始的问题就是为什么式一会循环很多次,而式二不会进入for循环体。
后来,突然间想到了,string vector等类型的角标应该是size_type 是unsigned int类型,也就是说这里
a.size()返回的类型应该是unsigned 类型,这里的运算又会使得int 类型自动转化成unsigned 类型,保存的值是-1的补码:0xffffffff(32位系统)
而,unsigned保存的值首位不是符号位,所以全部当做正数来看,因此式一会循环很多次。
另外又做了个测试比较
cout<<((int)(-1)==(unsigned int)(-1))<<endl;
cout<<((-1)==(unsigned int)(-1))<<endl;
输出的值都是1,也就是说二者在作比较的时候都是转化为unsigned 类型来做比较的。