从std::string
构建const char*
时,我经常使用以下模式:
const char* p = GetString();
std::string s(p);
我想我可以使用类似的模式:
const char* p = GetString();
std::string s = p;
但是,当我想从std::string
分配而不是构建const char*
时,我有太多选择:
s = p;
s.assign(p);
std::string(p).swap(s);
选择上面的选择是否大致相同?我应该选择哪个,为什么?
答案 0 :(得分:8)
为了便于阅读,只需使用惯用语operator=
进行分配即可。另外,直接从std::string
构建const char*
。
std::string s(GetString());
s = GetString();
答案 1 :(得分:3)
通常,你只是做
std::string s = GetString();
。
对于作业,请执行
s = GetString();
。
这意味着std::string
对象具有可用于生成最快操作的最大信息。
答案 2 :(得分:2)
operator =和.assign完全相同,你应该更喜欢operator = form,因为它更具可读性。
最后一点是不一样的。交换内容确实减少了构建给定对象所花费的时间,因为它没有复制,只会移动内容。你的语法首先将p复制到一个std :: string中,然后用s交换它,因为你还在复制p,所以它不会比其他的更高效。如果P是你正在破坏的其他地方的std :: string,那就更快了。
答案 3 :(得分:1)
前两个基本相同; assign
还有一些重载可以让你做有趣的事情。我会选择直截了当的=
,因为它更清晰。
最后一个似乎非常冗长和不直观;我不确定你为什么这样做(除非你急于回收s
正在使用的记忆。)