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

tos*_*mar 2 c c++ pointers reference

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

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

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

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

tad*_*man 5

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

int x = 1;
int *y = &x;
Run Code Online (Sandbox Code Playgroud)

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

&x != &y
Run Code Online (Sandbox Code Playgroud)

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

int x = 1;
int &y = x;
Run Code Online (Sandbox Code Playgroud)

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

&x == &y
Run Code Online (Sandbox Code Playgroud)

从那时起,ASxy是可以有效互换的。

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

相似之处在于指针用于操作共享值,或指针指针可用于操作指针,但有一个间接级别使其不同。

在没有引用的 C 中,你使用指针代替,所以你有这样的函数:

void mutate(int* v);
Run Code Online (Sandbox Code Playgroud)

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

void mutate(int& v);
Run Code Online (Sandbox Code Playgroud)