##c++ string类length()、size()等函数返回值属于无符号数
首先看一个例子
string s = "";
for(int i = 0; i < s.length() - 1; ++i)
{
cout << "s.length = " <<s.length() << endl;
break;
}
输出结果:
s.length = 0
string类的length()或者size()函数返回的是unsigned integer(无符号数)类型。而用在for循环时,正常不会出错,但作为判断条件时,当s.length()等于0时,s.length()-1 不等于 -1
看下面的例子:
string s = "";
for(int i = 0; i < s.length() - 1; ++i)
{
cout << "s.length - 1 = " << s.length()-1 << endl;
break;
}
输出结果:
s.length()-1 = 4294967295
可以将例2中代码改为如下,强制类型转换一下。
string s = "";
for(int i = 0; i < (int)s.length() - 1; ++i)
{
cout << "(int)s.length - 1 = " << s.length()-1 << endl;
break;
}
输出结果:
(int)s.length - 1 = -1
总结:string类的length()函数和size()函数一定要注意返回的是无符号数,当出现string对象length为0,对于string对象的操作更要注意,以防出错。其实不止string的size和length函数,基本数据类型的size和length的数据类型是size_t,这个数据类型是为了屏蔽不同平台的异构性而设置的一个类型,其实就是unsigned interger ,所以在size为0的时候一定要注意使用。