0

我有这样的方法:

MyClass& Smth::getMyClass() {
    return myClassObj;
}

现在这两个示例的工作方式相同(vs2012):

MyClass& a = smthObj.getMyClass();
a.whatever();

MyClass a = smthObj.getMyClass();
a.whatever();

如何解释这个?

4

2 回答 2

5

如何解释这个?

MyClass& a = smthObj.getMyClass();
a.whatever();

a是对的数据成员的引用。smthObj第二行调用whatever()数据成员。

MyClass a = smthObj.getMyClass();
a.whatever();

a是的数据成员的副本。smthObj第二行调用whatever()该副本。

于 2013-06-21T12:56:21.407 回答
4

它们的工作方式不同。在第一种情况下,函数返回一个引用,调用者将另一个引用绑定到同一个对象。任何操作a都将应用于myClassObj. 在第二种情况下,调用者制作对象的副本,应用到a的任何操作都将应用于副本并且不会影响原始对象。

于 2013-06-21T12:56:56.807 回答