【问题标题】:What is implicit dereference in C++什么是 C++ 中的隐式取消引用
【发布时间】:2011-10-02 02:46:39
【问题描述】:

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

【问题讨论】:

  • 您从哪里听到的?并回答您的问题:您取消引用指针。引用不是指针,而是引用。
  • 你的意思是用构造函数进行隐式转换吗?
  • 在我的课程笔记中简要提到过,我不确定它的含义。另外,维基似乎太模糊了。如果该术语不存在,请随时关闭问题。

标签: c++ dereference


【解决方案1】:

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

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

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.

正确的思考方式是使用“引用是一个花哨的指针”。您需要以自己的方式考虑引用。它们基本上是现有变量的另一个名称(AKA 别名)。

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

所以回答你的问题:

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

不,您不需要添加 &。

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

int plop = 8;
f(plop);
// plop is now 5.

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 1970-01-01
      • 2020-11-01
      • 2023-01-16
      • 2014-03-01
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多