c。星号操作符

在那里,如果,它是做什么的?

.*
就在这里。它是指针到成员操作符,用于指针到成员类型。

例如。

struct A
{
    int a;
    int b;
};

int main()
{
    A obj;
    int A::* ptr_to_memb = &A::b;

    obj.*ptr_to_memb = 5;

    ptr_to_memb = &A::a;

    obj.*ptr_to_memb = 7;

    // Both members of obj are now assigned
}

这里,A是一个结构体,ptr_to_memb是一个指向A的int成员的指针。*将A实例与一个指向member的指针组合起来形成一个引用给定A实例obj的适当成员的左值表达式。

指向成员的指针可以是指向数据成员或函数成员的指针,甚至对虚拟函数成员进行“做正确的事情”。

例如。该程序输出f(d)= 1

struct Base
{
    virtual int DoSomething()
    {
        return 0;
    }
};

int f(Base& b)
{
    int (Base::*f)() = &Base::DoSomething;
    return (b.*f)();
}

struct Derived : Base
{
    virtual int DoSomething()
    {
        return 1;
    }
};

#include <iostream>
#include <ostream>

int main()
{
    Derived d;
    std::cout << "f(d) = " << f(d) << '\n';
    return 0;
}
翻译自:https://stackoverflow.com/questions/2548555/dot-asterisk-operator-in-c

转载注明原文:c。星号操作符