返回对变量的引用: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。 obj
是 someObject
的副本
版本 2。初始化对 MyObject 的引用,(也)称为 obj,以便它命名与 someObject
.
相同的对象
如果你改变 obj
,版本 1 不会改变 someObject
,版本 2 会改变。
这取决于 someObject 的范围。第一个只会复制整个对象。但是,如果您打算以第二种方式使用它,则 someObject 应该是全局对象或静态对象。因为一旦你从 getReferenceToObject() 中 return,堆栈就消失了,你无法访问函数内部定义的本地对象。所以 return 将本地对象作为参考是行不通的。
假设您有以下代码:
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。 obj
是 someObject
版本 2。初始化对 MyObject 的引用,(也)称为 obj,以便它命名与 someObject
.
如果你改变 obj
,版本 1 不会改变 someObject
,版本 2 会改变。
这取决于 someObject 的范围。第一个只会复制整个对象。但是,如果您打算以第二种方式使用它,则 someObject 应该是全局对象或静态对象。因为一旦你从 getReferenceToObject() 中 return,堆栈就消失了,你无法访问函数内部定义的本地对象。所以 return 将本地对象作为参考是行不通的。