c++ - STL list_iterator代码题(STL 4.0.0)

标签 c++ stl

谁能解释为什么 _List_const_iterator 会使用 _List_node_base 并在需要时将其向下转换为 _List_node? -- 我认为这背后一定有一些原因。

谢谢

struct _List_node_base
{

    _List_node_base* _M_next;   ///< Self-explanatory
    _List_node_base* _M_prev;   ///< Self-explanatory
    // ...
};

template<typename _Tp> 
struct _List_node : public _List_node_base

{
    _Tp _M_data;                ///< User's data.
};


template<typename _Tp>
struct _List_const_iterator {

    // Must downcast from List_node_base to _List_node to get to
    // _M_data.
    reference operator*() const
    { return static_cast<_Node*>(_M_node)->_M_data; }

    // ...
    // The only member points to the %list element.
    const _List_node_base* _M_node;  ///WHY NOT USING _List_node here?
};

最佳答案

我猜 _M_node类型为 _List_node_base*以便可以使用 _M_next 分配/初始化它和/或 _M_prev (如您所示,类型为 _List_node_base* )。

我想知道为什么会有一个 _List_node_base类,而不是声明 _M_next_M_prev作为 _List_node 的成员类(class)。一个原因可能是为了减少生成的代码量:如果您有许多不同的 _List_node 特化类,将大部分(如果不是全部)代码/实现放在非泛型基类中可以减少生成的代码量。

关于c++ - STL list_iterator代码题(STL 4.0.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1545959/

相关文章:

c++ - 哪个 STL 容器最适合 std::sort? (这还重要吗?)

c++ - 当需要访问容器时返回迭代器而不是底层容器本身

c++ - 之前和之后的 lower_bound 和 upper_bound

c++ - Qt对象实例化查询

c++ - 结构数组有什么问题?

c++ - OpenGL 批处理 : Why does my draw call exceed array buffer bounds?

c++ - OpenMP 中的共享 vector

c++ - 是否有不是以 C/C++ 风格编写的 OpenCL 绑定(bind)?

c++ - 将 token 存储到数组中

c++ - 在不同 block 之间使用 C++ 类对象