bkm*_*ron 3 c++ arrays string offset memory-address
虽然字符串是动态的,所以它没有任何确定的大小,因此当我在s [0]之前得到s [1]时,C++将如何计算其偏移地址.
例如int a [2]
0000:1000 a[0]
0000:1004 a[1]
Run Code Online (Sandbox Code Playgroud)
程序:
#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;
}
Run Code Online (Sandbox Code Playgroud)
std::string不在其内存布局中实际包含其字符.它只包含一个指向动态分配内存的指针,并跟踪其大小.就像std::vector实际上并没有将其元素存储在其成员中一样.相反,它有一个指向位于"堆上"的实际元素的指针.小号
因此,无论字符串具有多少个字符,其大小(含义sizeof (std::string))都是编译时常量.