繁体   English   中英

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*?

仔细研究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复制到另一std::string期间进行的复制或引用计数取决于您使用的C ++库。

C ++ 2011标准需要std :: string才能创建真实副本。 2003版标准允许参考计数副本。

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

有一个预处理器定义可以打开新行为。

另请参见std :: string复制构造函数在GCC 4.1.2中不深入? std :: string在GCC 4.x / C ++ 11中重新引用了吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM