【问题标题】:Returning a reference to a variable: Meaningful/useful?返回对变量的引用:有意义/有用?
【发布时间】:2017-08-05 03:13:32
【问题描述】:

假设你有以下代码:

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.复制 2. 是的。
  • 非常感谢:)

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


【解决方案1】:

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

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

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

【讨论】:

  • 还有 5 分钟 :(
【解决方案2】:

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

【讨论】:

  • 哦,我这里有点不清楚,someObject 并不是要成为局部变量,而是全局/静态变量或类成员(如果 getReferenceToObject 是类方法:D ) 按照您的建议。
  • 完全是标签
猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 2010-10-09
  • 2023-03-03
  • 2011-07-22
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多