3

虽然字符串是动态的,所以它没有任何确定的大小,所以当我在 s[0] 之前得到 s[1] 时,C++ 将如何计算它的偏移地址。

例如 int a[2]

0000:1000    a[0]
0000:1004    a[1]

程序:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    string s[2];

    cin>>s[1];
    cout<<s[1]<<endl;

    cin>>s[0];
    cout<<s[0]<<endl;
}
4

2 回答 2

7

字符串数组是字符串对象的数组,它们具有固定大小,并且有效地包含了字符串实际所在位置的指针。

于 2012-11-08T10:50:03.023 回答
6

std::string在它的内存布局中并不实际包含它的字符。它只包含一个指向动态分配内存的指针并跟踪其大小。就像std::vector实际上并没有将其元素存储在其成员中一样。相反,它有一个指向位于“堆上”的实际元素的指针。小号

所以不管一个字符串有多少个字符,它的大小(意思sizeof (std::string))是一个编译时间常数。

于 2012-11-08T10:50:33.637 回答