假设我有这个载体
vector<Object> m;
然后我有以下作业:
vector<Object> o = m;
vector<Object> k = &m;
vector o将是向量m的COPY,而向量k将指向与向量m完全相同的对象....我是对的吗?
换句话说,如果我去o.push_back(something)
,这将修改向量o而不是向量m,而如果我去k.push_back(something)
,这确实会修改向量m。
答案 0 :(得分:6)
o
的权利,k
的错误。
vector<Object> k = &m;
// ^^ -- you're taking the address of m here
要进行参考,请使用
vector<Object>& k = m;
// ^ -- this makes a reference
答案 1 :(得分:2)
是的,这在概念上是对的 - 除了你错过了一个星号或者你的样本中使用过多的&符号。
vector<Object> o = m;
vector<Object>* k = &m; // use address-of (&) to create a pointer (*) to m
指针随身携带*
。
现在,m.push_back(...)
和k->push_back(...)
修改完全相同的对象。请注意使用->
,它用于访问指针的成员。
如果你想创建一个引用,你不要使用&
- 想想它是由编译器隐式完成的:
vector<Object>& k = m; // no address-of here, but k is a reference to m
现在,k.push_back()
可用于访问m
。
答案 2 :(得分:1)
此代码甚至不会编译。表达式&m
的类型为vector<Object>*
,无法将其分配给变量k
(其类型为vector<Object>
)。
可能你打算这样做:
vector<Object> o = m;
vector<Object>& k = m;
在这种情况下,o
将是m
的副本(导致o
和m
具有相同元素的副本,因此修改其中的内容不会影响另一个的内容)m
和k
都将引用同一个实例(因此当您使用向量引用向量时,使用两个变量之一的实例上的任何更改都将立即显示另一个变量)。