适当的std :: string赋值习惯用法

时间:2011-07-06 18:21:38

标签: c++ string

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);

选择上面的选择是否大致相同?我应该选择哪个,为什么?

4 个答案:

答案 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正在使用的记忆。)