我们看看string提供的函数:
1、reserve() 初始化string对象的空间大小
2、capacity() 返回string对象实际的内存空间的大小,这里和sie() 或 length() 不一样
3、data() 以数组的形式返回字符串(C风格的字符串)
4、string的存储空间也是动态扩展的
所以这里我们可以猜想string采用的是vector来存储数据的
有很多人说string 的下标访问和at()访问是一样的,其实还是有点差别的
reference __CLR_OR_THIS_CALL at(size_type _Off)
{ // subscript mutable sequence with checking
if (_Mysize <= _Off)
_String_base::_Xran(); // _Off off end
return (_Myptr()[_Off]);
}
at() 会检验访问是否越界,越界访问返回C++异常。截图如下:
debug模式下:
release模式下:
如果是下标访问,程序会直接崩溃。