0

这是一个具有两个具有不同返回类型的 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,而不是内置类型。STL 在https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler中是否说最好按值返回,因为会优化多个副本?还是我对他的理解有误?

4

3 回答 3

5

按价值。

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

A foo();

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

繁荣,x是一个悬而未决的参考。

价值回报不会发生这种情况。

于 2015-07-14T12:31:03.660 回答
4

链接正确,string按值返回对象。NRVO将负责返回引用而不是在幕后,因此您的代码将是完美的语义和干净的。

于 2015-07-14T12:31:05.593 回答
2

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

于 2015-07-14T12:32:05.503 回答