关于返回对象引用的一点疑惑
c++吧
全部回复
仅看楼主
level 2
XMYZG 楼主
IntSet& insert(int e){
if (size < MAX_SIZE && !isElem(e)){
arr[size] = e;
size++;
}
return *this;
}
按书上的接口写了个集合类,写到insert函数的时候返回的是对象的引用
然后我在main里面进行了如下测试:
int main(){
IntSet set;
IntSet set2 = set.insert(1);
set2.print();
set2.insert(2);
set2.print();
set.print();
cout << &set2 << " " << &set << endl;
return 0;
}
set调用insert(1),并把返回值赋给set2,这样set2输出1,没问题
但是我在set2调用insert(2),结果set2输出1 2,set输出1。
set2不是引用了set么?为什么对set2的insert不会改变set的内容?
把insert函数改成返回指针的话set2的insert就能修改set的内容
这是为什么=w=
2014年03月22日 06点03分 1
level 13
IntSet set2
从哪里看出来set2是引用的……
2014年03月22日 06点03分 2
好吧懂了……但是IntSet set2 = 的右边是Intset&,在不改成IntSet &set2的情况下是什么意思呢?
2014年03月22日 06点03分
是不是开了一块内存给set2,然后在不产生其他临时变量的情况下把set的内容复制给set2?
2014年03月22日 06点03分
level 5
是因为是复制了一份给了set2
2014年03月22日 08点03分 3
level 14
=调用了复制构造函数
2014年03月23日 04点03分 4
1