关于c++参考的问题

question on c++ reference

本文关键字:问题 参考 c++ 关于      更新时间:2023-10-16

假设我有这个向量

vector<Object> m;

,然后我有以下分配:

vector<Object> o = m;
vector<Object> k = &m;

向量o将是向量m的副本,而向量k将指向与向量m完全相同的对象....我说的对吗?

换句话说,如果我选择o.push_back(something),它会改变向量0而不是向量m如果我选择k.push_back(something),它确实会改变向量m

我是对还是错?

o正确,k错误。

vector<Object> k = &m;
//                 ^^ -- you're taking the address of m here

引用,使用

vector<Object>& k = m;
//            ^ -- this makes a reference

是的,这在概念上是正确的-除了您在示例中遗漏了一个星号或可能使用了过多的&符号。

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

这段代码甚至无法编译。表达式&m的类型为vector<Object>*,不能赋值给变量k(其类型为vector<Object>)。

可能你想这样做:

vector<Object> o = m;
vector<Object>& k = m;

在这种情况下,o将是m的副本(导致om具有相同元素的副本,因此修改一个元素的内容不会影响另一个元素的内容),mk将引用同一个实例(因此,当您使用另一个变量引用向量时,使用两个变量之一对实例的任何更改将立即可见)。