测试平台为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