如何获取指向引用成员的指针?
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)
时,我希望 Class
为 AA
,Member
为 int&
或 int
。所以我什至不需要指针本身,而是它的类型可以检索 class 类型和成员类型。
How to obtain pointer to reference (member)?
您无法获取指向(或引用或数组)引用的指针。 C++ 中没有 "pointer to reference" 这样的类型。这是因为引用不需要存储,所以可能甚至没有存储引用的地址。
当您对引用应用 addressof 运算符时,您得到的是所引用对象的地址。
图说千言
引用在内存中并没有真正的容器,它们更像是原始变量的别名,因此您无法获得指向引用的指针,因为引用没有自己的内存位置。
但是,你可以获得引用的地址,也就是它所引用的变量。在这个例子中,如果你 cout &rx 和 &x,它们是相同的。
所以您可能希望获得指向它引用的对象的指针,而不是指向引用的指针
考虑这段代码:
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
。所以我什至不需要指针本身,而是它的类型可以检索 class 类型和成员类型。
How to obtain pointer to reference (member)?
您无法获取指向(或引用或数组)引用的指针。 C++ 中没有 "pointer to reference" 这样的类型。这是因为引用不需要存储,所以可能甚至没有存储引用的地址。
当您对引用应用 addressof 运算符时,您得到的是所引用对象的地址。
图说千言
引用在内存中并没有真正的容器,它们更像是原始变量的别名,因此您无法获得指向引用的指针,因为引用没有自己的内存位置。
但是,你可以获得引用的地址,也就是它所引用的变量。在这个例子中,如果你 cout &rx 和 &x,它们是相同的。
所以您可能希望获得指向它引用的对象的指针,而不是指向引用的指针