为什么我们不能有相同的返回类型。而是作为 - >?

时间:2014-01-06 08:42:48

标签: c++ polymorphism operator-overloading

为什么我们可以超载 - >并不是 。运营商?两者都是成员访问运营商,具有相同的意义。 我从

中读到了一些参考资料

http://www.stroustrup.com/bs_faq2.html#overload-dot

Why can operator-> be overloaded manually?

但我仍然怀疑为什么我们可以超载.operator而不是 - >?

是因为 - >运算符隐式获取返回指针的引用,从而使调用成为链调用

struct X {
    int foo;
};

struct Y {
    X x;
    X* operator->() { return &x; }
};

struct Z {
    Y y;
    Y& operator->() { return y; }
};

Z z;
z->foo = 42;          // Works!  

z-> foo = 42;此调用转换为((z.operator())。opeartor())。operator(),因此foo的值设置为42。

如果我采取这一点,我还有两点,

1)为什么不能。(点)运算符这样工作?

2)如果 - >运算符不返回类Y的引用?那种情况下会出现编译错误吗?

0 个答案:

没有答案