将std::string.assign(const char*)或op=(带const char**)创建char*的副

Will std::string.assign(const char*) or op= ( with const char *) create a copy of the char*?

本文关键字:char const 的副 创建 op std string assign      更新时间:2023-10-16

仔细阅读c++代码,它看起来像是在复制,但我不能确定。所谓"复制",我的意思是类似strcpy的事情正在内部发生。并且std:string最终并没有指向内部传递的同一个char*的指针。

const char *somestring = ...
std::string str;
str.assign(somestring);
// or
str = somestring;  //in my impl, op= calls to assign(const char*)

std::string将始终从char *指向的数组进行复制。您还可以在一些构造函数中提供迭代器范围。

从一个std::string复制到另一个的复制或引用计数取决于您正在使用的C++库。

C++2011标准需要std::string来制作真实的副本。2003年的标准允许参考文献计数的副本。

GNU libstdc++使用引用计数的字符串。为了向后兼容性,即使是2011年的标准GCC也使用它们构建。否则,它就无法链接到使用2003标准构建的代码。

有一个预处理器定义来启用新行为。

另请参阅GCC 4.1.2中的std::string复制构造函数NOT deep?以及GCC 4.x/C++11中的std::string是否被引用?