假设您有以下代码:
MyObject someObject;
MyObject& getReferenceToObject() {
return someObject;
}
现在考虑以下方法来调用getReferenceToObject()
:
void MyFunction() {
MyObject obj = getReferenceToObject(); // 1.
MyObject& obj = getReferenceToObject(); // 2.
}
编译器允许1.和2.我的问题是,如果我这样做,将对象复制到obj
变量中,或obj
指向{{1} }}? 2.根本没有任何意义吗?
答案 0 :(得分:4)
版本1.使用obj
构造函数(或类似函数)初始化名为MyObject::MyObject(const MyObject & other);
的MyObject。 obj
是someObject
版本2.初始化对MyObject的引用,(也称为)obj,以便它将同一对象命名为someObject
。
如果您改变obj
,版本1将不会更改someObject
,版本2将会改变。{/ p>
答案 1 :(得分:1)
这取决于someObject的范围。第一个将只复制整个对象。但是如果你打算以第二种方式使用它,someObject应该是全局对象或静态对象。因为一旦从getReferenceToObject()返回,堆栈就消失了,您无法访问函数内定义的本地对象。因此,返回本地对象作为参考将不起作用。