指针访问运算符如何 - >作品?

时间:2016-01-08 07:25:05

标签: c++ pointers

#include <iostream>
using namespace std;
class myclass
{

public:
    void fun()
    {
        cout<<"Having some fun"<<endl;
    }
};


class spointer
{
    myclass * mptr;
public:
    spointer(myclass * m)
    {
        mptr=m; 
    }

    myclass * operator->()
    {
        return mptr;
    }

};


int main() {
    // your code goes here

    spointer s(new myclass);

    s->fun();
    return 0;
}

s->fun()中调用main时,s->会返回指向myclass的指针,但会在fun()对象上调用myclass指针指向?

编辑:由于spointer::operator->会返回指向myclass的指针,为什么可以说s->fun(),而不必说s->->fun()或其他什么

1 个答案:

答案 0 :(得分:6)

C ++ 11标准说明了重载的->运算符(13.5.6“重载/重载运算符/类成员访问”):

  

如果(x.operator->())->m存在,并且如果通过重载解析机制选择运算符作为最佳匹配函数,则表达式x-&gt; m被解释为类型为T的类对象x的T::operator->() < / p>

因此,成员访问运算符(->)将应用于重载实现的结果(导致类似于s->->fun()注释的内容)。这允许重载在实现智能指针或指针代理时“自然地”操作。