通过将返回值绑定到const引用来提高C ++性能

时间:2015-03-20 16:17:51

标签: c++

考虑我有以下功能:

std::string foo();

这样做是否有优势:

const std::string& ref = foo();

对此:

std::string val = foo();

或者编译器足够聪明,可以在第二种情况下进行优化。

1 个答案:

答案 0 :(得分:4)

大多数人都会触发NRVO。让我们举个例子

std::string foo()
{
    std::string s1;
    // fill up s1 with content
    return s1;
}

void bar()
{
    std::string s2 = foo();
    std::cout << s2;
}

这既不会复制也不会移动,而是返回值(s1)将直接在s2构建。这称为返回值优化,它意味着你不应该通过const引用返回,或者通过const引用捕获作为某种性能破解,它将不起作用,或者减慢速度,取决于它。