我很想知道某些C ++功能是如何工作的。我试图学习诸如std :: function之类的C ++ 11概念,但是我一直在像INVOKE(函数,参数,返回)这样我不理解的墙。人们告诉我,"哦,只是忽略它并使用auto"但我希望对C ++及其标准库的工作方式有一个真正深刻的理解,所以我想找到标准库的源代码。
我猜想C ++标准库与C标准库有点相关,而且对于像std :: iostream这样的东西,最低级别的凌乱的汇编/二进制实现有点相关,但我对更高级别的东西感兴趣-level抽象,如智能指针和std :: function。鉴于许多C ++ 11库曾经是Boost库,我怎样才能找到C ++标准库实现的源代码?
答案 0 :(得分:9)
答案 1 :(得分:2)
如果您关心libstdc++,可以深入了解GCC的源代码。实际上它有时会利用标准C库以上(例如::operator new
可能会调用malloc
等等)。
请注意,由于C ++库是标准的一部分,因此其中一些可能以特定于编译器的方式实现。
原则上,没有什么要求标准头文件是真正的操作系统文件;编译器可以以不涉及任何文件的特定方式解析#include <vector>
。我知道没有编译器这么做!
特别是,libstdc++
使用了一些GCC builtins和一些GCC attributes(Clang/LLVM也恰好理解了这一点)。
一些标准类型需要(或从中获利)编译器中的内部支持。例如,GCC有一些特定的代码来处理va_list
和std::initializer_list
(当然还有基本类型,如int
...)等。此外,编译器的C ++实现{ {3}}(或closures)与其他类等相关...
此外,GCC的一些优化过程(它有几百个)的设计考虑了libstdc++
实现的一些功能。
BTW,使用最新的gdb
调试器,例如libstdc++6-4.9-dbg
debian软件包也可以提供帮助。