首先发点牢骚,谷歌上搜索 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-> 是不需要参数的。

原创文章,转载请注明来源:http://euyuil.com/2390/overload-operator-gt-in-cplusplus/