【发布时间】:2013-06-10 13:01:43
【问题描述】:
考虑这段代码:
void doSomethingWithString(string& mString)
{
// mString gets modified in here
}
string getCopy1(const string& mString)
{
string result{mString}; doSomethingWithString(result); return result;
}
string getCopy2(string mString)
{
doSomethingWithString(mString); return mString;
}
getCopy1 和 getCopy2 之间是什么:
- 清楚地表明传递的字符串不会被修改
- 清楚地表明用户会得到一个新的字符串返回
- 更快/编译器可以更好地优化(启用 C++11,考虑移动语义)
?
【问题讨论】:
-
不确定问题是什么。你不放弃答案吗?
-
@KonradRudolph 问题是列出的三个点。基本上,getCopy1 和 getCopy2 都做同样的事情 - 哪个更快,更具表现力?
-
无耻插件:见stackoverflow.com/questions/16944715/…——我犹豫是否将问题标记为重复,因为另一个问题专门关于构造函数(以及从参数初始化成员变量)并且还有其他细微差别,但大局是一样的。
-
如果您要制作副本无论如何,请在参数中进行,所以
getCopy2是。 -
@Vee:不,在您的情况下传递值更好。看看答案,他们会解释。
标签: c++ string c++11 reference parameter-passing