返回对变量的引用:有意义/有用吗?

时间:2017-03-14 16:45:55

标签: c++ function reference return-value assignment-operator

假设您有以下代码:

MyObject someObject;

MyObject& getReferenceToObject() {
    return someObject;
}

现在考虑以下方法来调用getReferenceToObject()

void MyFunction() {
    MyObject obj = getReferenceToObject(); // 1.
    MyObject& obj = getReferenceToObject(); // 2.
}

编译器允许1.和2.我的问题是,如果我这样做,将对象复制到obj变量中,或obj指向{{1} }}? 2.根本没有任何意义吗?

2 个答案:

答案 0 :(得分:4)

版本1.使用obj构造函数(或类似函数)初始化名为MyObject::MyObject(const MyObject & other);的MyObject。 objsomeObject

的副本

版本2.初始化对MyObject的引用,(也称为)obj,以便它将同一对象命名为someObject

如果您改变obj,版本1将不会更改someObject,版本2将会改变。{/ p>

答案 1 :(得分:1)

这取决于someObject的范围。第一个将只复制整个对象。但是如果你打算以第二种方式使用它,someObject应该是全局对象或静态对象。因为一旦从getReferenceToObject()返回,堆栈就消失了,您无法访问函数内定义的本地对象。因此,返回本地对象作为参考将不起作用。