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

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

string s;时做了一件事:

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

这两个函数的定义如下:

string初始化中string s和string s =

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

string初始化中string s和string s =

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<

 

你可能感兴趣的:(c++)