不,这不是每个人都能错过当地人的错误.我只是想了解返回对你传入的对象的引用(我正在阅读引文).
所以,如果我有这样的功能:
const foo & foo::function2(const foo & val) const
{
using namespace std;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
然后我主要做这个:
foo object1;
object1.someproperty = 7;
foo object2 = object1.function2(object1);
object2.someproperty = 5;
cout << &object1 << endl;
cout << &object2 << endl;
Run Code Online (Sandbox Code Playgroud)
当我通过引用返回时,object2不应该具有与object1相同的地址(和属性)吗?不应该改变一个对象中的"someproperty"来改变另一个对象的值吗?或者,返回对对象的引用是否只是将值复制到新对象中?
似乎同样的事情正在发生,好像我只是说我要返回一个foo对象而不是一个引用.
foo object2 = object1.function2(object1);
Run Code Online (Sandbox Code Playgroud)
function2()返回引用object1; 在foo随后的拷贝构造函数被调用,以复制object1到object2,因为object2被声明为一个foo对象.
如果您声明object2为const引用:
const foo& object2 = object1.function2(object1);
Run Code Online (Sandbox Code Playgroud)
那么object2就是参考object1.