关于string和char[]形式所得到的字符串当我提取一个数组越界的字符会得到什么;
比如string S="123456";
我cout<<S[i]-'0';(这里i均是大于5的整数)。
得到的结果一直都是-48.
但是如果我char S[6]={'1','2','3','4','5','6'};
cout<<(S[i]-'0');(这里i均是大于5的整数)
得到的结果是会随着i的变化而变化的。求大神解答一下
通俗讲就是,你定义了一个string对象(其内存是连续开辟的),内部是“123456”,表面是如此6个元素,实际上内部还分配了一些空间,以备你添加新的元素进去。所以你越界了讲道理会产生不可预知的结果,但是这个不可预知的结果对于你的编译器是固定的,就好比你用rand产生随机数一样,不加入不同的种子,多次运行结果是一样的。
C++中string类使用的是深拷贝,并且有一个默认的存储缓冲区,大小是16个字节,当存储的字符串长度超出的时候,会使用指针来对字符串进行存储,并且进行拷贝构造的时候两部分都会进行深拷贝。