Хотя строка является динамической, поэтому она не будет иметь определенного размера, поэтому, когда я получу s [1] перед s [0], как 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;
}
Массив строк — это массив строковых объектов, которые имеют фиксированный размер и эффективно содержат указатели в другом месте, где струны на самом деле проживают.
std::string
не в своей структуре памяти фактически содержит его символы. Он просто содержит указатель на динамически выделяемую память и отслеживает ее размер. Как std::vector
на самом деле не хранит свои элементы внутри своих членов. Вместо этого он имеет указатель на фактические элементы, расположенные «в куче». S
Таким образом, независимо от количества символов в строке, ее размер (значение sizeof (std::string)
) является постоянной времени компиляции.