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

How to obtain pointer to reference member?

考虑这段代码:

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。所以我什至不需要指针本身,而是它的类型可以检索 class 类型和成员类型。

How to obtain pointer to reference (member)?

您无法获取指向(或引用或数组)引用的指针。 C++ 中没有 "pointer to reference" 这样的类型。这是因为引用不需要存储,所以可能甚至没有存储引用的地址。

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

图说千言

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

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

所以您可能希望获得指向它引用的对象的指针,而不是指向引用的指针