考虑以下代码:
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)
时,我希望Class
为AA
而Member
为int&
或int
。所以我甚至不需要指针本身,但它的类型将允许检索类类型和成员类型。
答案 0 :(得分:6)
如何获取引用(成员)的指针?
您无法获取指向(或引用或引用数组)的指针。没有这样的类型&#34;指向引用的指针&#34;在C ++中。这是因为引用不需要存储,因此甚至可能没有存储引用的地址。
在引用上应用addressof运算符时,得到的是所引用对象的地址。
答案 1 :(得分:3)