假设我有:
// This is all valid in C++11.
struct Foo {
int i = 42;
int& j = i;
};
// Let's take a pointer to the member "j".
auto b = &Foo::j; // Compiler is not happy here
// Note that if I tried to get a pointer to member "i", it would work, as expected.
Foo f;
std::cout << f.*b; // Try using the pointer to member
编译器抱怨我无法获取成员的地址,因为它是一个引用。准确地说:
语义问题:无法形成指向引用类型“int &”的成员“j”的成员指针
我知道这样做似乎毫无意义,但我只是想知道为什么不能这样做。
为什么这是不可能的?
这是无法完成的,因为您无法获取指向引用周期的指针。
如果您可以将成员指针指向引用,则这将与堆栈上引用的行为不一致。 C++的态度是引用不存在。因此,您永远无法形成指向它们的指针。
例如,&f::a
一定会有所不同&f::b
。并通过取消引用&f::b
,您将有效地实现指向引用的指针,这是不允许的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)