c++ - std::String 调整大小不改变地址

标签 c++ string resize

我想检查如果我的字符串调整大小,字符串的地址是否会改变。所以我写了下面的程序,其中初始容量为 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/

相关文章:

android - “pm install”命令在Android上无效

c++ - 如何设置、清除和切换单个位?

c++ - 为什么这种链接方法不起作用?

cocoa - 正确推送 NSView

.net - 在表格 HTML 中禁用自动调整宽度

html - 在 DIV 中调整 SVG 的大小并且不保留纵横比

c++ - boost make_shared 不带模板参数

iphone - 如何在 Objective-C (iPhone) 中连接字符串?

python - 去除 Python 中重复的字母

c - (C语言)检查字符串中的元音