如何找到 C++ 标准库的实现?

How can I find implementations of the C++ Standard Library?

我很好奇了解某些 C++ 功能的工作原理。我正在尝试学习 C++11 概念,例如 std::function,但我总是碰壁,例如 INVOKE(function, arguments, return) 我不明白。人们告诉我,"Oh, just ignore it and use auto" 但我想真正深入了解 C++ 及其标准库的工作原理,所以我想找到标准库的源代码。

我猜想 C++ 标准库与 C 标准库和凌乱的 assembly/binary 最低级别的实现有些相关,例如 std::iostream 等,但我很感兴趣在更高级的抽象中,如智能指针和 std::function。鉴于许多 C++11 库曾经是 Boost 库,我如何找到 C++ 标准库实现的源代码?

标准 C++ 库的两个最流行的开源实现是:

这两个网站都包含 git/svn 个带有源代码的存储库的链接。

您可能会深入研究 libstdc++ if you care about GCC 的源代码。事实上,它有时会利用标准 C 库(例如 ::operator new 可能调用 malloc,等等...)

请注意,由于 C++ 库是标准的一部分,其中一些可能以特定于编译器的方式实现。

原则上,没有什么要求标准头是真正的操作系统文件;编译器可以以不涉及任何文件的特定方式解析 #include <vector>。我知道没有编译器做那么多!

特别是,libstdc++ 正在使用一些 GCC builtins and some GCC attributes (which happens to be also understood by Clang/LLVM)。

并且一些标准类型需要(或受益于)编译器的内部支持。例如,GCC 有一些特定的代码来处理 va_liststd::initializer_list(当然还有基本类型,如 int...),等等。此外,编译器对 C++ closures (or lambda functions) 与其他 类、等相关...

此外,GCC 的一些优化过程(它有数百个)在设计时考虑了 libstdc++ 实现的一些特性。

顺便说一句,使用最近的 gdb 调试器,例如libstdc++6-4.9-dbg debian 软件包也可能有帮助。