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

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

本文关键字:实现 标准 C++ 何找      更新时间:2023-10-16

我很想知道某些C++功能是如何工作的。我正在尝试学习 C++11 个概念,例如 std::function,但我不断遇到我不理解的 INVOKE(函数、参数、返回)等障碍。人们告诉我,"哦,忽略它并使用 auto",但我想真正深入了解 C++ 及其标准库的工作原理,所以我想找到标准库的源代码。

我猜C++标准库与 C 标准库和最低级别的混乱汇编/二进制实现(如 std::iostream 等)有些相关,但我对更高级的抽象感兴趣,如智能指针和 std::function。鉴于 C++11 库中的许多曾经是 Boost 库,我如何找到C++标准库实现的来源?

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

  • libstdc++,GCC 项目的一部分
  • libc++,LLVM项目的一部分

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

如果你关心GCC,你可能会深入研究libstdc++的源代码。事实上,它有时利用高于标准 C 库(例如 ::operator new可能会打电话给malloc,等等...

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

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

特别是,libstdc++正在使用一些GCC内置和一些GCC属性(恰好也被Clang/LLVM理解)。

一些标准类型需要(或从中受益)编译器中的内部支持。例如,GCC 有一些特定的代码来处理va_liststd::initializer_list(当然还有像 int 等基本类型)等。此外,编译器对C++闭包(或lambda函数)的实现与其他类等有关。

此外,GCC 的一些优化传递(它有数百个)在设计时考虑了libstdc++实现的一些功能。

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