【C++】string类的size()和length()的返回值是无符号数

本文关键点:

C++ string类的size()和length()的返回值是无符号数,在写程序的时候将一个int型数值与其返回值比较时,应注意可能出现的问题!

下面给出一个有问题的代码段

string s = "";
for(int i = 0; i < s.length() - 1; ++i)
{
   cout << "s.length = " << s.length() << endl;
   break;
}

//以上代码执行结果为:s.length = 0

按说以上代码循环体里面的代码是不应该被执行的,造成以上bug的原因是:

在有符号整型和无符号整型的比较中,自动将有符号整型数转换为无符号整型。

所以,以上代码中int数值i与s.length() - 1比较时,其实发生的比较是—— 0 < 4294967295;因为-1转成unsigned型就是4294967295

总结:当进行int型与size()、length()返回值比较时,特别要注意返回值进行相关运算后可能出现的负数,这时将会发生类型转换。

你可能感兴趣的:(C/C++,string类,C++)