Skip to content

如何阅读 STL 源码

很多人谈起 STL 源码,脑子里就只能一些上古的教材教程,以及古老的版本。

当然了,他们可能会狡辩:“学习设计原理,和版本无关” 等等说法,是,也不是,没有必要。

新人尤其不要去寻找一些莫名其妙的上古版本的 STL 然后单独阅读 ,那样很愚蠢。

明确你的目的

我们要达到的是能够“阅读 STL 源码”,而不是说什么这里道听途说:xxx 容器底层是 xxx,是怎么实现的 xxx。然后又看某些上古实现,迷迷糊糊,模板一堆的语法不懂,看一点猜一点。一旦你陷入到这种,算是完了,直接重开吧

你要看源码,就不可能不看模板,你必须学习模板,不需要会太多的元编程等等的玩意,但是基本的需要会。而且源码推荐看越新的越好

并且只建议看三种:MSVC STLlibstdc++libc++,也就是对应了三大编译器,MSVC、gcc、clang。不要舍近求远,你应该看的就是最常用最常见的实现代码,而且要是最简单的方式,比如在开发环境中就能直接跳转进去。

这三个标准库中,MSVC STLlibstdc++ 最为常见,clang 默认也是使用 libstdc++个人而言最推荐的是 MSVC STL 的。

尤其如果你正在使用 MSVC 作为你的编译器,那就不用犹豫了。

阅读现代的 STL 源码

您都阅读源码了,相信也是有所追求,既然如此,自然越新越好,尤其 MSVC STL。

MSVC STL 很早之前就不支持 C++11 了,它的实现完全基于 C++14,出于某些原因 C++17 的一些库(如 invoke, _v 变量模板)被向后移植到了 C++14 模式,所以即使是 C++11 标准库设施,实现中可能也是使用到了 C++14、17 的东西。

所以您至少要学习或具备 C++17 的知识才能阅读它的源码。

观感

我本人对于 libstdc++ 那种规范是深恶痛绝,一行代码不能超过 80 个字符,一堆莫名其妙的格式,我们来对比一下就好了:(主题:OneDarkPro 字体:Cascadia Code SemiBold 字号:16)

MSVC STL

字体:Menlo 字号:16

libstdc++

嗯... 或许因为我的主题和美化做的太好了,不晓得各位能不能感觉。

总结

阅读御三家的 STL 源码,尤其推荐 MSVC STL,libstdc++ 次之。

需要学习模板,这是必须的,建议学习《现代C++模板教程》

阅读现代的 STL 源码,这个是必须的。

阅读观感这个因人而异了,反正我个人而言是更喜欢 MSVC STL。