箭头操作符必须是类的成员
形式: string * operator->() const {
...
}
重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。
point->mem 执行过程:
(1)如果 point-> (point的重载箭头运算符) 返回类型是指针b,则内置箭头操作符可用于该指针,编译器对该指针解引用并从结果对象获取指定成员。也就是 b->mem 如果被指向的类型没有定义那个成员,则编译器产生一个错误。
(2)如果 point-> (point的重载箭头运算符) 返回类型是类类型的其他对象(或是这种对象的引用),则将递归应用箭头操作符。编译器检查返回对象所属类型(假设为类A)是否具有成员箭头,如果有,就继续应用箭头操作符
也就是point->()->() // 也就是 A->()
否则,编译器产生一个错误。
这个过程持续下去,直到返回一个指向带有指定成员(就是mem)的对象的指针,然后执行第一种情况,或者返回某些其他值,在后一种情况下,代码出错。
参考资料: