将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
复制到另一个的复制或引用计数取决于您正在使用的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是否被引用?
相关文章:
- 在字符串函数中抛出'char const*'实例后调用的终止
- 双重标准?为什么只有 char* const&a = "bla" 的警告?
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 为什么 const char* const & = 可以编译"hello"?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 如何将std::wstring转换为char const[]
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 使用提升对字符串进行标记化时,将令牌转换为 char* const* 时失败
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 将 std::vector<std::string> 转换为 const char* const*
- 引发"char const*"错误的实例后调用的终止
- 将const char * const参数成员分配给新值
- 从'const char**'到'char* const*'的转换无效
- 从 sub_match<常量字符 *>' 转换为'const char *const &'
- char*const和constchar*之间有什么区别?(重复-需要更多澄清)
- 使用工厂方法时编译器错误:无法转换"const std::p air<char* const
- HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*
- 如何从'char const*'中删除常量
- 'char const *str'作为模板参数
- 为什么不;t strlen(.)应为const char*const str,而不是const char*