什么更好:按值或通过常量引用返回std :: string?

时间:2015-07-14 12:28:17

标签: c++ c++11 return-type return-by-reference return-by-value

这是一个有两个具有不同返回类型的getter的类:

class A {
    std::string m_test { "test" };

public:
    std::string test_by_value { return m_test; }
    const std::string& test_by_const_ref() { return m_test; }
};

// ...

哪个更好?它是关于std :: string,而不是内置类型。 是S.T.L.在https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler中说最好按值返回,因为多个副本会被优化?还是我错误地指出了他?

3 个答案:

答案 0 :(得分:3)

按价值计算。

我在野外遇到了类似的代码:

A foo();

std::string const& x = foo().test_by_const_ref();

轰隆,x是一个悬空参考。

按值返回不会发生这种情况。

答案 1 :(得分:3)

链接正确,按值返回string个对象。 NRVO将在幕后处理返回引用,因此您的代码将完全是语义和清晰的。

答案 2 :(得分:1)

按值返回,因为编译器将优化返回值。