【发布时间】:2013-05-08 11:26:49
【问题描述】:
当我使用构造函数将char* 转换为std::string 时:
char *ps = "Hello";
std::string str(ps);
我知道 std 容器在被要求存储值时倾向于复制值。
是复制整个字符串还是仅复制指针?
如果之后我做str = "Bye" 会改变 ps 指向“Bye”吗?
【问题讨论】:
-
他们有重载的赋值运算符,实际上如果我猜对了他们会使用复制和交换算法。并且将从 char* 创建一个临时字符串对象。
-
@Koushik:你猜错了。在这里制作浅拷贝会违反直觉并且容易出错。
-
@VioletGiraffe 是的,我意识到指针没有被复制,并且有一个深拷贝,应该有一个内部缓冲区来保存它。
-
不要将字符串文字分配给
char*,始终使用const char*。字符串文字不应该改变。 -
char *ps = "Hello";应该是const char *ps = "Hello";
标签: c++ string constructor stdstring