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

Jef*_*eff 8 c++ stl operator-overloading

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

reference operator*() const {return (*node).data;}
Run Code Online (Sandbox Code Playgroud)

取而代之:

reference operator*() const {return node->data;}
Run Code Online (Sandbox Code Playgroud)

此外:

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

template<class T>
struct __list_node {
    typedef void * void_pointer;
    void_pointer prev;
    void_pointer next;
    T data;
};
Run Code Online (Sandbox Code Playgroud)

Jos*_*eld 10

在大多数情况下(例如,何时node是指针),这些将是等效的.的x->y操作者被定义为等同于(*(x)).y.但是,它可能会过载,operator*或者operator->在这种情况下它们可能不会像您期望的那样(但它们应该).

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

  • *"在这种情况下,它们可能不会像您期望的那样"* - 但如果它们没有,请停止使用该库.作者是个坏人. (6认同)