C++重载运算符 - >()没被调用?

Dus*_*ser 0 c++ operator-overloading

任何人都可以解释为什么重载运算符 - >类Foo没有从类型Foo*的指针调用?

#include <iostream>
using namespace std;

class Foo {
public:
Foo * operator -> () {
    cout << "calling Foo * operator -> ()\n";
    return this;
}
    int x;
};


void main() {
    Foo f;
    Foo * pF = &f;
    pF->x;                  // Why is overloaded operator-> not being called here?
    (pF->operator->())->x;  // This works.

    cout << "End test.\n";
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 6

为什么重载operator->不在这里调用?

因为pF是指针,而不是Foo实例.你已经超载operator->Foo,而不是Foo*.你可以operator->直接打电话给你f.

f->x;
Run Code Online (Sandbox Code Playgroud)

你可能不超载operator->Foo*或任何其他指针类型.