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

时间:2015-03-16 06:35:16

标签: c++ c++11 standard-library

我很想知道某些C ++功能是如何工作的。我试图学习诸如std :: function之类的C ++ 11概念,但是我一直在像INVOKE(函数,参数,返回)这样我不理解的墙。人们告诉我,"哦,只是忽略它并使用auto"但我希望对C ++及其标准库的工作方式有一个真正深刻的理解,所以我想找到标准库的源代码。

我猜想C ++标准库与C标准库有点相关,而且对于像std :: iostream这样的东西,最低级别的凌乱的汇编/二进制实现有点相关,但我对更高级别的东西感兴趣-level抽象,如智能指针和std :: function。鉴于许多C ++ 11库曾经是Boost库,我怎样才能找到C ++标准库实现的源代码?

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

如果您关心libstdc++,可以深入了解GCC的源代码。实际上它有时会利用标准C库以上(例如::operator new可能会调用malloc等等)。

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

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

特别是,libstdc++使用了一些GCC builtins和一些GCC attributesClang/LLVM也恰好理解了这一点)。

一些标准类型需要(或从中获利)编译器中的内部支持。例如,GCC有一些特定的代码来处理va_liststd::initializer_list(当然还有基本类型,如int ...)等。此外,编译器的C ++实现{ {3}}(或closures)与其他类等相关...

此外,GCC的一些优化过程(它有几百个)的设计考虑了libstdc++实现的一些功能。

BTW,使用最新的gdb调试器,例如libstdc++6-4.9-dbg debian软件包也可以提供帮助。