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

Why does the iterator of List in STL use the (*node).data instead of node->data?

本文关键字:data node- gt node List STL 迭代器 为什么      更新时间:2023-10-16

我最近查看了SGI STL的源代码。我想知道我是否可以使用"->"运算符来替换(*node).data来实现operator*(),像这样:

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

替换为:

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

另外:

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

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

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

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