我想检查如果我的字符串调整大小,字符串的地址是否会改变。所以我写了下面的程序,其中初始容量为 1,然后变为 30,我假设在容量变化时字符串会移动地址,但那没有发生。
谁能解释一下这是为什么?
string s = "1";
string& s1 = s;
cout << &s << " capacity is " << s.capacity() << endl;
cout << &s1 << endl;
s = "sdhflshdgfljasdjflkasdfhalsjdf";
cout << &s << " capacity is " << s.capacity() << endl;
cout << &s1 << endl;
输出是
0x7ffc11fc08d0 capacity is 1
0x7ffc11fc08d0
0x7ffc11fc08d0 capacity is 30
0x7ffc11fc08d0
最佳答案
字符串变量不会移动,但它持有内部指针的缓冲区可能会随着分配更多内存而移动到新地址。但是,通过获取变量 的地址无法观察到这一点。如果打印 .data()
成员返回的指针(通过将其转换为空指针),您可能会看到变化(假设新大小足以触发重新分配 - 许多字符串使用小使用预分配缓冲区的字符串优化,因此您需要超越它)。
关于c++ - std::String 调整大小不改变地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54390315/