【问题标题】:dereference of a reference引用的取消引用
【发布时间】:2014-10-12 10:02:30
【问题描述】:

写这篇的时候:

void foo(int*& x);

如果我理解正确,foo 接受 x 类型的 x 引用,而不是 & 中和 *

但是当我写这个时会发生什么:

void foo(int&* x);

这是一个指向引用的指针吗? 编译器会优化它并取实际值吗?因为如果它本身的值取消引用引用。

编辑:

所以我不能将指针指向引用,但这是为什么呢?它与引用的地址是堆栈地址有关吗?

【问题讨论】:

  • 如果您的编译器接受它,我会感到非常惊讶。我的没有。你试过了吗?
  • gcc:错误:无法声明指向“int&”的指针
  • 对指针的引用是 C++ 最不可读的特性之一。与将指针传递给指针相比,这有什么优势?
  • int*& 是对指针的引用。类似于int**

标签: c++ reference dereference


【解决方案1】:

§8.3.2 [dcl.ref]/p5:

不应有对引用的引用,没有引用数组, 并且没有指向引用的指针。

【讨论】:

    【解决方案2】:

    int&* 格式不正确,无法获取指向引用的指针。

    【讨论】:

    • @JohannGerell 尝试编译声明void foo(int&*);
    • 当然 - 我评论了“不能使用指向引用的指针”:) - 抱歉,应该更清楚。
    • @JohannGerell 您没有使用指向引用的指针,因为在声明引用后它充当l-value。您正在获取l-value 的指针。
    • @MaximYegorushkin ITYM 他正在获取一个对象的地址
    猜你喜欢
    • 2016-11-18
    • 2012-03-23
    • 2019-10-29
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多