历史:为什么我们可以重载 -> 而不是 . 操作员?两者都是成员访问运算符,具有相同的意义。
我已经阅读了一些参考资料
http://www.stroustrup.com/bs_faq2.html#overload-dot
和
但是我的疑问仍然存在,为什么我们可以重载 .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) 为什么 .(dot) 运算符不能以这种方式工作?
2) 如果 -> 运算符不返回对 Y 类的引用怎么办?在这种情况下会是编译错误吗?