我盯着下面的代码片段,试图了解正在发生的事情,或者至少是如何命名我正在用Google搜索的内容。
struct A {
A *m_ptr;
typedef A * (A::*T);
operator T() const {
return &A::m_ptr;
}
};
我发现
operator T()
是键入T
的重载转换运算符,而类型T
是表示A*(A::*)
的typedef。现在,A::*
到底是什么?和
A*
有什么区别?A::
语句中的return
是什么意思? 最佳答案
和A*
有什么区别?X*
是X
对象的地址,而X Y::*
是指向成员的指针,指向类型为Y
的类X
的成员。
区别在于指针是对象的地址。
指向成员的指针更像是一个偏移量,因为它不是实际地址,而是相对于某个对象的。它告诉您如何使成员获得某些对象。您不能单独取消引用成员的指针,必须将其与对象结合使用才能取消引用。
您通过在限定ID上使用&
运算符创建指向成员的指针,因此&x
表示“获取对象x
的地址”,而&Y::x
表示获取针对该对象的指针类x
的成员Y
。
您可以使用.*
运算符(或->*
运算符)通过将指针与对象(或指向对象的指针)组合来取消引用。
例如
struct Y { int i; int j; };
int Y::* memptr = &Y::i;
Y y;
int& i = y.*memptr;
memptr = &Y::j;
int& j = y.*memptr;
关于c++ - 特定的重载转换运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26365219/