在 C++ 中重载 operator-> 运算符
首先发点牢骚,谷歌上搜索 operator-> 是不能搜索到预期的结果的,因为 > 这个符号谷歌没有处理好,或者说谷歌根本没打算处理……
还好我灵感一来就写了 operator-> 结果搜到的大多数是 operator>> 但是少量的是 operator-> 最后点击了一个韩文的网页,用谷歌翻译把韩文翻译成了英文,最后看懂了。这是我从出生到现在第一次如此由衷地感谢棒子。
OK 言归正传,为什么我们需要重载 operator-> 呢?在 C++ 标准库里这个运算符经常用在迭代器 (iterator) 上。且看下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 | struct line { double x, double y; }; vector<line> lines; /* ... */ for (vector<line>::iterator it = arr.begin(); it != arr.end(); ++it) { cin >> it->x >> it->y; /* ... */ } |
C++ 中迭代器的用法与指针比较类似,而如果指针指向一个 struct 的话,可以用指针加 operator-> 访问 struct 里的成员。迭代器也就“兼容”了这种写法。
那么我们自己在写迭代器的时候常常也要重载 operator-> 运算符。这个运算符比较特殊,不过不难,只需要记住一个公式便可:
表达式 it->member 等价于 (it.operator->())->member
从这里我们也可以看出重载 operator-> 是不需要参数的。

嘿,我从Google进来的。
我也是觉得 Google 到朋友的博客是件很嗨的事情。
嗯,有什么方式可以联系上你么。最近有个C++难题,问了不少人都无解,就指望老大你了。
我邮箱啊,或者我手机啊,或者人人啊。联系到我真的很简单啊。