C++里,对于一个类对象a,它的->操作展开为:(a.operator->())->...,即对operator->返回的对象继续调用->,直到得到一个原始结构体或数据指针为止。
test.cpp
#includestruct Data { int a; int b; }; class A { public: A(const Data &d) : data_(d) {} Data *operator->() { std::cout << "A::operator->()" << std::endl; return &data_; } private: Data data_; }; class B { public: B(const A &a) : a_(a) {} A operator->() { std::cout << "B::operator->()" << std::endl; return a_; } private: A a_; }; int main() { Data data{1, 2}; A objA(data); B objB(objA); std::cout << objB->a << std::endl; std::cout << objB->b << std::endl; return 0; }
运行结果如下:
objB->a等价于((objB.operator->()).operator->())->a。
objB->b等价于((objB.operator->()).operator->())->b。



