使用引用对象进行初始化

时间:2013-06-21 12:53:45

标签: c++

我有这样的方法:

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

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

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

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

如何理解这个?

2 个答案:

答案 0 :(得分:5)

  

如何理解这个?

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

a参考smthObj的数据成员。第二行在数据成员上调用whatever()

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

asmthObj数据成员的副本。第二行在该副本上调用whatever()

答案 1 :(得分:4)

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