gpt4 book ai didi

C++ STL 字符串复制构造函数——总是深拷贝?

转载 作者:IT王子 更新时间:2023-10-28 23:32:48 28 4
gpt4 key购买 nike

我在 C++ 中看到了对 STL 字符串的复制构造函数行为的各种冲突引用,我希望有人可以为我澄清这一点,给出以下代码段:

string str() { return string("this is a string"); }
//meanwhile, in some other function...
string s = str();

对象“s”是否构成函数“str()”中定义的字符串对象的深层拷贝?还是对象's'只是指向在'str()'函数中的字符串构造函数调用期间分配的同一 block 内存?

最佳答案

字符串会深拷贝,它们不共享同一个缓冲区。

也就是说,当从函数中返回它们时,大多数优秀的编译器可以使用返回值优化或复制省略,这样操作就不会那么昂贵(甚至免费)。

如果您使用的是 c++11,则移动语义由标准指定,因此对于返回字符串之类的事情,请放心,最坏的情况(即使没有优化)相当便宜。

编辑:总而言之,您可以保证您“拥有”的字符串将具有唯一的内存块,该内存块将至少在本地字符串的生命周期内持续存在。然而,编译器很可能不会从函数中的字符串中复制它,而只是交换它的指针,甚至完全省略拷贝(这意味着函数中的字符串实际上也是您分配的字符串)。

关于C++ STL 字符串复制构造函数——总是深拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467049/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com