关于c++参考的问题
question on c++ reference
假设我有这个向量
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
的副本(导致o
和m
具有相同元素的副本,因此修改一个元素的内容不会影响另一个元素的内容),m
和k
将引用同一个实例(因此,当您使用另一个变量引用向量时,使用两个变量之一对实例的任何更改将立即可见)。
相关文章:
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- C++ 而循环问题 Codecademy 参考 [已解决]
- 我有几个关于参考变量的问题
- MSYS2静态QT未定义的参考问题
- OPENCV筛选未定义的参考问题
- 有关参考和指针的问题
- Python C-API:PYDICT_GETITEM上的分割故障,可能的参考问题
- 参考类型静态数据成员的问题可能是编译器错误
- 通过参考问题
- 命名空间外部变量的未定义参考/多重定义,C 结构问题
- 关于通用参考和左值参考的问题
- 通过参考问题
- 矢量参考问题
- VS 2010构建问题:参考问题
- 课堂自我参考问题
- C++参考问题
- 关于指针和参考文献的两个简短问题
- 这个快速排序有什么问题,我从书中参考它
- OpenCV 2.3编译问题-未定义的参考- Ubuntu 11.10