gpt4 book ai didi

c++ - STL背后的设计原理

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:05 50 4
gpt4 key购买 nike

我查看了一些 STL 实现的来源(SGI、STLport、libc++),发现了一些似乎对所有或大多数实现都通用的设计模式,但我找不到理由。我认为一定有一个很好的共鸣,并想知道它是什么:

  1. 许多类,包括 vectorlist_iterator 等,被实现为 2 个类,例如list_iterator_base 具有部分功能,然后 list_iterator 继承了 list_iterator_base 的其余部分。重点是什么?这似乎可以在一节课中轻松完成。

  2. 迭代器似乎没有使用iterator 类。使用它会有一些性能损失吗?

这是我快速浏览时发现的 2 个问题。如果有人知道解释 STL 实现的实现原理的好资源,我会很高兴听到它。

最佳答案

答案很简单:

  1. STL 是关于泛型编程的。关键思想是不要有重复的代码。近期目标是不重复源代码,但事实证明,不重复二进制代码也是有意义的。因此,STL 组件将常用部件分解出来并使用它们是很常见的。列表类的链接或 vector 的类型独立属性只是两个示例。对于 vector ,甚至有多个层:一些部分完全独立于类型(例如,大小),其他部分只需要类型本身(例如,所有访问器、迭代器等),还有一些部分需要知道如何处理资源分配(例如,插入和销毁需要知道正在使用的分配器)。
  2. 事实证明 std::iterator<...>并没有真正起作用:在基类中定义的类型取决于模板参数,在派生自此类基类的类模板中不能直接访问。也就是说,类型需要使用基类进行限定,并且需要使用 typename 标记为类型。 .更糟糕的是,理论上用户可以分配派生类的对象并通过指向 std::iterator<...> 的指针释放它们。 (是的,那将是一件愚蠢的事情)。也就是说,没有好处,但有潜在的缺点,即最好避免。

也就是说,我不知道有任何好的资源涵盖实现通用库的技术。 STL 实现中应用的大部分细节都是由多人独立发明的,但关于泛型编程的文献仍然相对匮乏。我认为任何描述 STL 的论文实际上都没有讨论实现技术:它们通常专注于设计细节。鉴于似乎只有极少数人了解 STL 是什么,因此作者倾向于专注于描述 STL 是什么而不是如何实现它也就不足为奇了。

关于c++ - STL背后的设计原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278728/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com