这是一个有两个具有不同返回类型的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中说最好按值返回,因为多个副本会被优化?还是我错误地指出了他?
答案 0 :(得分:3)
按价值计算。
我在野外遇到了类似的代码:
A foo();
std::string const& x = foo().test_by_const_ref();
轰隆,x
是一个悬空参考。
按值返回不会发生这种情况。
答案 1 :(得分:3)
链接正确,按值返回string
个对象。 NRVO将在幕后处理返回引用,因此您的代码将完全是语义和清晰的。
答案 2 :(得分:1)
按值返回,因为编译器将优化返回值。