【发布时间】:2015-10-03 02:06:31
【问题描述】:
这是一个有两个返回类型不同的 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 中说最好按值返回,因为会优化多个副本?还是我理解错了?
【问题讨论】:
-
您想要一份副本还是一份参考资料?这应该会为您解答您的问题。
-
什么更好?设计?表现?如果有,是记忆还是时间?
-
1. 如果
A对象的寿命将超过引用的范围并且您需要它只读,则由const reference&返回。 2. 如果A对象超出范围和/或您需要复制/修改它,则返回value。 3. 如果您需要修改原始值返回,而它仍在范围内,reference&。 --- 不返回引用然后复制修改它,总是返回值用于写访问。 -
@CodeAngry 知道程序的其余部分将如何使用它不是课堂的事情。通过引用返回是最好的方法,因为使用该类的人可以决定使用引用或复制变量。
标签: c++ c++11 return-type return-by-reference return-by-value