【发布时间】:2011-06-21 05:47:02
【问题描述】:
这是我的代码示例:
class X
{
public:
void f() {}
};
class Y : public X
{
public:
X& operator->() { return *this; }
void f() {}
};
int main()
{
Y t;
t.operator->().f(); // OK
t->f(); // error C2819: type 'X' does not have an overloaded member 'operator ->'
// error C2232: '->Y::f' : left operand has 'class' type, use '.'
}
为什么编译器试图将 operator-> 的责任从 Y 转移到 X?当我实现 X::op-> 时,我不能在那里返回 X - 编译错误说“无限递归”,而从 X::op-> 返回一些 Z 再次表示 Z 没有 operator->,因此会更高并且层次更高。
谁能解释这个有趣的行为? :)
【问题讨论】:
标签: c++ overloading operator-keyword