string中的size_type与int不能比较的问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 16:15:54
比如说,我写
int i=0;string s="assd";
while(i<s.size()){
...
}
有些时候while的比较条件是会出错的,我偶尔碰到过一次,但大部分情况还很正常,那位高手给讲讲啊...
据说s.size()是size_type类型,不能与int比较,但大部分情况还是对的,那什么时候比较时才会出错呢??

应该是出现警告,即warning,而不是错误error.
C,C++在有符号数和无符号数之间的运算时,会先把数都转成无符号数,再运算,因此,如果i=-1,那么转成无符号数就是0xFFFFFFFF,就会出现-1>2这样的情况,所以VC对这种情况会有warning,提醒你注意.

s.size() 返回类型是 size_t 。
size_t 就是 unsigned int
s.size() 返回的数值,不计字符串结束符 '\0'.
当字符串长度为0时 while 条件为假,退出,因为你的 i 给定 0.

TC, unsigned int 最大值 0xffff
TC, int 最大值 0x7fff

VC, unsigned int 最大值 0xffffffff
VC, int 最大值 0x7fffffff

字符串长度超界?你不至于写那么长的字符串吧。

size_type 在vc里似乎就是unsigned int , 所以如果你用unsigned int 比应该不会出错。 如果你非要用 int 跟 size_type比, 那么如果 s.size()> 2^31就可能出错了

这是MSDN对size_type的定义:
basic_string::size_type:
An unsigned integer type that can represent the number of elements and indices in a string.

可见size_type实际上就是一个无符号整型(unsigned int),所以与整型进行比较是完全可以的。不过一般编译器会给出警告提示,这并不是严格的错误。如果你用的是VC,在编译时确实会出现有时候编译出现警告提示,有时候不出现的情况。

如果你所指的“出错”不是我所说的警告提示,请将你的错误信息和相关代码贴出来看看。

s.size()是返回无符号类型,需要强制类型转换。

用过,不是很清楚,但没碰到过你的问题哦