- size_type定义为与 unsigned 型(unsignedint 或 unsigned long)具有相同的含义,而且可以保证足够大能够存储任意 string 对象的长度。
- 对于任意一种给定的数据类型, 它的 unsigned 型所能表示的最大正数值比对应的 signed 型要大倍,表明 size_type 存储的 string 长度是 int 所能存储的两倍。
- 假设n是一个具有负值的int,则表达式s.size() < n的判断结果几乎肯定是true。这是因为负值n会自动地转换成一个比较大的无符号值。如果一条表达式中有了size()函数就不要再使用int了,这样可以避免混用int和unsigned可能带来的问题。
虽然很多地方在说不要把size()的返回值赋值给int型变量,但是还是看到很多代码中直接for(int i=0;i<s.size();i++)这么用,估计是笃定了 i 不会出现负值。
但是自己编程的时候出现了错误:
1、带符号数与size_type类型比较
int i=-1;
if(i<S.size())
cout<<1<<endl;
else
cout<<0<<endl;
输出的是0,原因就是负数变成了较大的无符号值。
但是事先将S.size()赋值给int变量就运行通过:
int lens=S.size();
——不过感觉这里如果S.size()太大,超过int的最大值范围应该还是会出错
总结:
1、字符串长度较小,且有和带符号int混用的需求,则可以赋值给int或 long int等
2、字符串长度大,且所用变量不会出现负值,则直接用size_type类型变量