2

C++ 中的隐式取消引用到底是什么意思?这是否意味着当我将对变量的引用传递给函数参数时,我不需要它前面的 & 来使用它的值?

4

2 回答 2

12

我假设您的老师试图解释指针和引用之间的区别。

将引用称为执行隐式取消引用的精美指针是相对常见的(尽管在技术上并不准确)。

int   x    = 5;
int*  xP   = &x;
int&  xR   = x;


xR  = 6; // If you think of a reference as a fancy pointer
         // then here there is an implicit de-reference of the pointer to get a value.

*xP = 7; // Pointers need an explicit de-reference.

正确的思考方式是不要使用“A reference is a fancy pointer”。您需要以自己的方式考虑引用。它们基本上是现有变量的另一个名称(AKA 别名)。

因此,当您通过引用函数传递变量时。这意味着该函数正在使用您通过其别名传递的变量。该函数对现有变量有另一个名称。当函数修改变量时,它会修改原始变量,因为引用原始变量(只是它的另一个名称)。

所以回答你的问题:

我不需要它前面的 & 来使用它的值吗?

不,您不需要添加 &。

int f(int& x)  // pass a value by reference
{
    x =5;
}

int plop = 8;
f(plop);
// plop is now 5.
于 2011-07-10T04:02:01.537 回答
4

C++ 将隐式取消引用指针的另一个上下文是函数指针:

void foo() { printf("foo\n"); }

void bar() {
  void (*pf)() = &foo;
  (*pf)(); // Explicit dereference.
  pf(); // Implicit dereference.
}
于 2011-07-11T09:50:13.437 回答