什么是C ++中的隐式解引用

时间:2011-07-10 03:52:30

标签: c++ dereference

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

2 个答案:

答案 0 :(得分:10)

我认为你的教学试图解释指针和参考文献之间的区别。

将引用称为隐式反引用的花式指针是相对常见的(虽然技术上不准确)。

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.

答案 1 :(得分:3)

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

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

void bar() {
  void (*pf)() = &foo;
  (*pf)(); // Explicit dereference.
  pf(); // Implicit dereference.
}