9

It is said that the arrow operator is applied recursively. But when I try to execute the following code, it prints gibberish when it is supposed to print 4.

class dummy
{
public:
    int *p;

    int operator->()
    {
        return 4;
    }
};

class screen 
{
public:
    dummy *p;

    screen(dummy *pp): p(pp){}
    dummy* operator->()
    {
        return p;
    }
};

int main()
{
    dummy *d = new dummy;
    screen s(d);
    cout<<s->p;
    delete d;
}
4

3 に答える 3

14
于 2012-05-05T09:56:30.983 に答える
2

C++ Primer (第 5 版) は、570 ページで次のように定式化しています。

アロー演算子は、メンバー アクセスの基本的な意味を失うことはありません。矢印をオーバーロードすると、矢印が指定されたメンバーをフェッチするオブジェクトを変更します。矢印がメンバーをフェッチするという事実を変更することはできません。

于 2015-07-24T10:50:46.300 に答える
1

The deal is once screen::operator->() returns a pointer (dummy*) the recursion stops because built-in (default) -> in used on that pointer. If you want recursion you should return dummy or dummy& from screen::operator->()

于 2012-05-05T09:57:40.383 に答える