考虑以下代码:
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
之间,哪一个:?
最佳答案
两种版本都清楚地表明没有意图修改传入的值。
在将右值作为参数传递的情况下,getCopy2
效率更高。在这种情况下,无需复制,因为将移动参数而不是复制参数,并且您也没有内部复制。对于getCopy1
,您始终会强制执行至少一个副本。如果将左值作为参数传递,则需要执行移动而不是创建引用。哪种效率更高取决于编译器和字符串实现的许多细节,但是移动的速度应与创建引用的速度相当。
就返回值而言,我没有看到任何区别。