C++学习笔记26 size()、length()等函数的返回值的问题

##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的时候一定要注意使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值