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

Returning a reference to a variable: Meaningful/useful?

提问人:tagelicht 提问时间:3/15/2017 最后编辑:einpoklumtagelicht 更新时间:3/15/2017 访问量:62

问:

假设您有以下代码:

MyObject someObject;

MyObject& getReferenceToObject() {
    return someObject;
}

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

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

编译器允许同时 1.和 2.我的问题是,如果我像 1 一样做,Object 会被复制到变量中,还是会指向?并做 2.有什么意义吗?objobjsomeObject

C++ 函数 参考 return-value assignment-operator

评论

1赞 apple apple 3/15/2017
1. 复制 2.是的。
0赞 tagelicht 3/15/2017
非常感谢:)

答:

4赞 Caleth 3/15/2017 #1

版本 1。初始化一个 MyObject,使用构造函数(或类似函数)调用。 是objMyObject::MyObject(const MyObject & other);objsomeObject

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

如果发生突变,版本 1 不会更改,版本 2 会更改。objsomeObject

评论

0赞 tagelicht 3/15/2017
还有 5 分钟:(
1赞 kadina 3/15/2017 #2

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

评论

0赞 tagelicht 3/15/2017
哦,我在这里有点不清楚,它不打算成为局部变量,而是全局/静态变量或类成员(如果是类方法:D),正如您所建议的那样。someObjectgetReferenceToObject
0赞 kadina 3/15/2017
确切的tagelicht