c++ - 为什么在 C++ 中对可变变量使用引用

标签 c++ c++11 reference copy auto

我是 C++ 的新手。我遇到了一些代码并感到困惑

vector<int> vec{3,1,4,1,5};
vector<int> &vecRef = vec;
auto vecCopy = vecRef; // makes copy of vec
auto &vecRef2 = vecRef; // reference

我了解了 c++ 中引用类型的用法,并且我理解了为什么它对不可变类型很有用。但是对于 vector 这样的可变类型,vector vecCopy = vec 和 vector& vecRef = rec 之间有什么区别?他们不都是 vec 的别名吗?

最佳答案

But for mutable types like vectors, what's the difference between vector vecCopy = vec and vector& vecRef = rec? Aren't they both alias to vec?

没有。一个是整个 vector 的拷贝。另一个是对相同内容的引用。

您的示例代码是人为设计的。我想不出您这样做的任何理由:

vector<int> vec{3,1,4,1,5};
vector<int> &vecRef = vec;

始终通过引用传递变量。但我想不出为什么我会像这样引用局部变量,除了说明引用而不是拷贝的示例。

所以:vecCopy 是一个完整的不同 vector ,有自己的内容。在代码的末尾,它的内容与 vec 相同,但在那之后,您可以添加一个或另一个,它们开始发散。 vecRef 是对完全相同数据的引用。如果您将它们视为(在幕后)指针,那么它们指向同一个对象。

关于c++ - 为什么在 C++ 中对可变变量使用引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57464144/

相关文章:

c++ - 没有匹配函数 - C++

c++创建编译时未知类型的连续数组

c++ - 初始化空的2D vector ?

c++ - 如何专门化 vector 类模板?

C++ - << 运算符重载,链表 - 地址而不是标准输出

c++ - 模板类的模板函数特化

PHP 引用 : An understanding

java - 当引用变量被分配一个对象时,我们将该变量称为对象而不是引用变量?

c++ - 如何在 C++ 中以小写形式将文本从数组的一维传输到另一维?

非类型参数的 C++ 可变参数模板偏特化