如果我有以下指向vector的指针
vector<int> *v = new vector<int>(10);在以下方面有何区别:
vector<int> &vr = *v;和
vector<int> vr2 = *v;根据我对引用的理解,对vr和vr2的更改不会影响v。例如:
vr.at(0) = 5;
vr2[1] = 6;
// v[0] and v[1] would not change to 5 and 6 respectively.那么,vr和vr2有什么区别呢?
发布于 2018-07-19 05:50:50
根据我对参考文献的理解,对vr和vr2的更改不会影响v.例如:
这是不正确的理解。
vr是对v指向的对象的引用。对vr的任何更改都将更改v指向的对象的内容。
另一方面,vr2是一个副本。对vr2所做的任何更改只影响vr2,而不影响v指向的对象。
发布于 2018-07-19 05:51:20
在第一个片段中
vector<int> &vr = *v;将引用声明为指向的向量v*。vr和*v上的操作现在将有相同的结果--这就是引用的本质。然而,在这里
vector<int> vr2 = *v;您可以通过v2复制分配创建一个新的向量。新向量保存着*v在赋值时持有的相同的数据。它们现在是两个独立的对象,而改变一个并不会影响另一个。
https://stackoverflow.com/questions/51415189
复制相似问题