C++中string.size()函数 踩坑

本文探讨了在C++编程中,使用string、vector等类型的size函数返回的无符号整型数与带符号数混合运算可能导致的意外结果。当带符号数在表达式中与无符号数结合时,会自动转换为无符号类型,如-1转换后可能导致不期望的比较行为。举例说明了size()函数在判断长度时,应当使用0作为比较对象以避免错误。了解这种潜在问题对于编写安全、可靠的代码至关重要。
摘要由CSDN通过智能技术生成

​ 例如string、vector等类型的size函数返回的是一个无符号整型数,如果在表达式中混和使用了带符号数和无符号数,将产生意想不到的结果。

​ 带符号数将自动转换为无符号数,例如-1,由于-1的二进制表示的最高位为1,这回导致size() > -1一定会返回false。在进行判断size()时,还是应该使用0进行比较。

案例

#include<iostream>
#include<string>
using namespace std;

int main(){
	string haystack = "";
	string needdle = "a";
	int i=0;
	cout<<haystack.size()<<endl;
	cout<<needdle.size()<<endl;
	cout<<haystack.size()-needdle.size();
	return 0;
}

haystack的长度为0,needle的长度为1,而 无符号的 0减1 时出现了如下情况

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值