string初始化中string s和string s = ""的区别(c++)

没有检索到摘要

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试平台为vc6.0,即p.j STL的版本.

string s;时做了一件事:

string s = "";时做了两件事:

这两个函数的定义如下:

重点是_Ptr = 0,它是char*  类型,指向字符串,也即声明它为空指针.同时令字符串的长度_Len = 0.

string s = "";时还会调用assign函数,可以看到一个copy函数,但是这里因为_N,即长度=0,导致_Grow()返回值为false,所以并没有执行if里面的语句,直接把当前对象返回了.

那么,也就是说,string s和string s = "",它们的结果是一样的,_Ptr = 0,_Len = 0,两者并没有什么区别.

同时另外一个值得说的是string的c_str()函数,

这个函数返回的是_Ptr,如果它是空指针,那么就会开辟一个字节的内存,存放ASCII码等于0的内容(也就是\0),并将该地址返回.

像下面这个代码,在执行==时就会调用c_str(),然后执行类似strcmp()的操作,结果也是没有疑问了,不会出现有拿NULL(0)去比的情况.

string s1 = "";
string s2;	
	
bool flag = s1 == s2;
cout<<flag<<endl; //true

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值