首页 > 解决方案 > C++ 对对象的引用是否类似于 C 中的双指针?

问题描述

我正在阅读 Koenig 的“Accelerated C++”。在第 5 章中,Koenig 定义了一个引用向量参数的函数。在函数体中,创建一个新向量并将其分配给参数。

对对象的引用是否类似于 C 中的双指针?

我在想象一个局部变量,它是指向堆上数据结构的指针(在这种情况下是一个向量)。这个变量的地址(一个双指针)被传递给一个函数,并且在函数体中被解引用并分配了堆上一个新数据结构的地址(在这种情况下,一个新的向量)。

我意识到引用具有与指针不同的属性,并且引用不一定作为指针实现。但是,以上是一种合理的思考方式吗?

标签: c++cpointersreference

解决方案


指针始终是一个单独的值,在以下情况下:

int x = 1;
int *y = &x;

这里有两个值,xy。它们具有不同的地址,例如:

&x != &y

在引用的情况下,它只是一个代码别名,而不是一个实际的独立事物,所以:

int x = 1;
int &y = x;

现在你有两个完全相同的名字:

&x == &y

从那时起,就像xy现在一样,可以有效地互换。

请记住,必须取消引用才能使用指针。引用不需要这种特殊处理。

相似之处在于可以使用指针来操作共享值,或者可以使用指针指针来操作指针,但是存在一定程度的间接性使其不同。

在没有引用的 C 中,您使用指针代替,因此您具有如下功能:

void mutate(int* v);

这是一个指针,意思是“可变值”,尽管在 C++ 中它看起来像:

void mutate(int& v);

推荐阅读