哪个更好:return std::string 按值还是按常量引用?

What is better: return std::string by value or by constant reference?

这里有一个 class 有两个 return 类型不同的吸气剂:

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中说按值return更好,因为多副本会优化?还是我理解错了?

按值。

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

A foo();

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

繁荣,x 是悬空引用。

按值 returns 不会发生这种情况。

link 是正确的,return string 个对象的值。 NRVO 将在幕后处理 returning 引用,因此您的代码将具有完美的语义和清晰度。

Return 按值,因为编译器将优化 return 值。