返回对变量的引用:Meaningful/useful?

Returning a reference to a variable: Meaningful/useful?

假设您有以下代码:

MyObject someObject;

MyObject& getReferenceToObject() {
    return someObject;
}

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

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

编译器允许 1. 和 2。我的问题是,如果我像 1. 那样做,对象会被复制到 obj 变量中,还是 obj 指向 someObject? 2. 有任何意义吗?

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

的副本

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

相同的对象

如果你改变 obj,版本 1 不会改变 someObject,版本 2 会改变。

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