我有这样的方法:
MyClass& Smth::getMyClass() {
return myClassObj;
}
现在这两个例子的工作方式相同(vs2012):
MyClass& a = smthObj.getMyClass();
a.whatever();
MyClass a = smthObj.getMyClass();
a.whatever();
如何理解这个?
答案 0 :(得分:5)
如何理解这个?
MyClass& a = smthObj.getMyClass();
a.whatever();
a
是参考到smthObj
的数据成员。第二行在数据成员上调用whatever()
。
MyClass a = smthObj.getMyClass();
a.whatever();
a
是smthObj
数据成员的副本。第二行在该副本上调用whatever()
。
答案 1 :(得分:4)
它们的工作方式不同。在第一种情况下,函数返回一个引用,调用者将另一个引用绑定到同一个对象。 a
上的任何操作都将应用于myClassObj
。在第二种情况下,调用者制作对象的副本,应用于a
的任何操作都将应用于副本,不会影响原始对象。