如何找到C++标准库的实现
How can I find implementations of the C++ Standard Library?
我很想知道某些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_list
和std::initializer_list
(当然还有像 int
等基本类型)等。此外,编译器对C++闭包(或lambda函数)的实现与其他类等有关。
此外,GCC 的一些优化传递(它有数百个)在设计时考虑了libstdc++
实现的一些功能。
顺便说一句,使用最新的gdb
调试器,例如 libstdc++6-4.9-dbg
debian 软件包也可能有所帮助。
- 根据C++标准的定义实现"is_similar"类型特征
- C++标准是否允许<double>在没有开销的情况下实现 std::可选
- 任何用于 boost::p roperty 树的标准库实现
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 是否可以仅使用标准 c++/c++11 实现不带"sleep"的计时器?
- 在 C++11 标准中,为什么要依赖 char 类型实现?
- 是否可以在C++标准库中实现always_false
- 如何(以及谁可以)实现C++委员会定义的标准库功能
- 是否可以在标准弱指针之上实现非拥有"slightly smart"指针?
- 标准库头文件函数原型的实现是如何用 c++ 编写的?
- 为什么标准库不以无锁的方式为 8 字节以下的结构实现 std::atomic?
- GCC 如何实现 C++ 标准分配器
- clang实现char8_t的方式是否存在缺陷,或者标准的某个黑暗角落是否禁止优化?
- 是否使用符合标准的线程池进行 std::async 的 Visual C++ 实现
- 以C 标准的方式实现STD :: Malloc
- 标准库中 std::d isjunction 的实现
- 是否有一个包含std::unique_ptr的c++标准库实现可以与visualstudio2008一起使用
- 如何在课堂上实现标准迭代器
- 在C中实现C++标准11的std::move函数