如何获取引用成员的指针?

时间:2017-02-08 17:11:04

标签: c++ gcc reference pointer-to-member argument-deduction

考虑以下代码:

struct AA
{
    int& rr;
};

有没有办法获得AA::rr的指针(或可能是参考)才能获得这个?

AA* aa;
auto mm = &AA::rr; // error: cannot create pointer to reference member ‘AA::rr’
aa ->* mm;

同样在gcc-7.0.1 decltype(AA::mm)只有int&。这是根据标准吗?这有意义吗?

修改

对不起,伙计们,我提出的问题并不是很好。没有人抱怨引用不是对象或者没有指向引用的指针。目标很自私。给定struct AA { int& rr; };我只想拥有这样的函数:

template < typename Class, typename Member >
void test(Member Class::*) { }

在致电test(&AA::rr)时,我希望ClassAAMemberint&int。所以我甚至不需要指针本身,但它的类型将允许检索类类型和成员类型。

2 个答案:

答案 0 :(得分:6)

  

如何获取引用(成员)的指针?

您无法获取指向(或引用或引用数组)的指针。没有这样的类型&#34;指向引用的指针&#34;在C ++中。这是因为引用不需要存储,因此甚至可能没有存储引用的地址。

在引用上应用addressof运算符时,得到的是所引用对象的地址。

答案 1 :(得分:3)

图片说千言万语

picture

引用在内存中实际上没有容器,它们更像是原始变量的别名,因此您无法获取引用指针,因为引用没有自己的内存位置。

但是,您可以获取引用的地址,它是引用的变量。在这个例子中,如果你是cout&amp; rx和&amp; x,它们是相同的。

所以你可能希望得到一个指向它引用的对象的指针,而不是指向引用的指针