string 类型分配空间的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/28 17:29:49
比如,我定义一个string a;但是,我没有进行初始化,那么,编译器给这个变量分配了多大的空间啊?还是压根就没分配空间?
还有,如果我定义个一字符串数组string b[2]={"aaa","aa"};我现在想得到这个数组的元素个数,怎么得到啊?b[0]和b[1]占得空间一样大么??
请高手赐教啊,谢谢了!

1:
string a;
这时候字符串a的容量也是0,可以通过a.capacity()得到,
2:
string b[2]={"aaa","aa"};
b[0],b[1]所占的空间是一样大的,它们2个都是string类的对象,对象只为类的非静态成员变量,继承而来的变量,虚函数表指针分配空间.
这一点你可以通过
cout << sizeof(b[0]) <<endl;
cout << sizeof(b[1]) <<endl;
得以验证

我讲的很粗略,要想理解的很全面的话,你可以自己读读stl里的string源代码了解第一个问题.
第2个问题你可以看看看<<深度搜索c++对象模型>>

字符串数组中每一个元素的长度并不相同,在定义字符串数组时编译系统为每一个字符串变量分配固定的字节数(VC+6。0为4个字节),在这个存储单元中,并不是直接存放字符串本身,而是存放字符串的地址。
可以用sizeof(b)来求长度。