关于c ++参考的问题

时间:2011-04-24 19:13:28

标签: c++ object vector reference variable-assignment

假设我有这个载体

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。

我错了还是对的?

3 个答案:

答案 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的副本(导致om具有相同元素的副本,因此修改其中的内容不会影响另一个的内容)mk都将引用同一个实例(因此当您使用向量引用向量时,使用两个变量之一的实例上的任何更改都将立即显示另一个变量)。