這裏是我的代碼示例:超載運營商 - >
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 '.'
}
爲什麼編譯器正試圖從Y「移動的責任」爲操作符 - >以X?當我實現X :: op->然後我不能返回X那裏 - 編譯錯誤說「無限遞歸」,同時從X :: op->返回一些Z,再次表示Z沒有operator->,因此變得更高並且層次更高。
任何人都可以解釋這個有趣的行爲嗎? :)
我不會說這是假設返回一個指針,只是不管它返回需要支持`操作符 - >`。 – GManNickG 2011-02-04 09:20:24