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