为什么STL中List的迭代器使用(* node).data而不是node-> data?

时间:2013-12-22 14:41:06

标签: c++ stl operator-overloading

我最近查看了SGI STL的源代码。我想知道我是否可以使用“ - >”运算符替换(*node).data以实现operator*(),如下所示:

reference operator*() const {return (*node).data;}

替换为:

reference operator*() const {return node->data;}

另外:

node是一个指向struct对象的指针,如下所示:

template<class T>
struct __list_node {
    typedef void * void_pointer;
    void_pointer prev;
    void_pointer next;
    T data;
};

1 个答案:

答案 0 :(得分:10)

在大多数情况下(例如,当node是指针时),这些将是等效的。 x->y运算符定义为等效于(*(x)).y。但是,可能会重载operator*operator->,在这种情况下,它们的行为可能与您预期的不同(但应该)。

正如你所说,在这种情况下node只是一个指针,所以它们是等价的。