将参数传递给r值参考vs const左值参考

问题描述 投票:2回答:1

让我们考虑以下功能:

void processString1(const string & str) { /** **/}
void processString2(string && str) { /** **/}

processString1("Hello");
processString2("Hello");

我假设,processString1将调用复制构造函数,processString2将调用字符串的移动构造函数。什么更有效率?

c++ c++11
1个回答
3
投票

您的理解在这里被误导了。

[首先,这些函数均未获取值-它们均具有引用。因此,当一个对象传递给任一对象时,不会调用构造函数-传递的任何对象都仅绑定到引用。

但是,您的函数调用传递了一个C字符串-并且存在从C字符串到std :: string的隐式转换。

因此,每个人都会构造C字符串“ Hello”的tempstARY std :: string。

在第一种情况下,该临时对象将绑定到对const的引用,在第二种情况下,将绑定到rval-对非常量的引用。

语言保证临时函数的生存期至少存在于函数调用的生存期。

这两个函数调用都不做任何构造-唯一的构造发生在C字符串被隐式转换为std :: string的实例时。

© www.soinside.com 2019 - 2024. All rights reserved.