我盯着下面的代码片段,试图了解正在发生的事情,或者至少是如何命名我正在用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/

10-11 22:55
查看更多