为什么我们可以超载 - >并不是 。运营商?两者都是成员访问运营商,具有相同的意义。 我从
中读到了一些参考资料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的引用?那种情况下会出现编译错误吗?