我想浏览 C++ 标准库的 gnu 实现的源代码——头文件和实现。 我已经陷入:
http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/index.html
我的第一步是查看头文件:
http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/a01376.html
我的问题是,根据我的理解,typedeffed 字符串类似于: typedef basic_string 字符串; 应该出现在字符串 header 中,但我在这里没有看到。
问题: -- 字符串符号的定义在哪个文件中? -- 我看到字符串头文件包含很多头文件,如果在这些内部头文件之一中定义了 typedeffed sring 符号,那么这个站点上是否有搜索栏,我可以通过它直接找到符号的定义。 (以防有人之前已经浏览过该站点的内容)
谢谢, 贾格拉蒂
最佳答案
许多 libstdc++ 仅使用 header 实现,但 STL 的某些部分(如 std::basic_string
)已编译实现。
模板std::basic_string
的声明位于/usr/include/c++/4.4.4/bits/basic_string.h
(替换'4.4.4 ' with g++ -dumpversion
) 并且实现在 /usr/include/c++/4.4.4/bits/basic_string.tcc
中。 std::string
、std::wstring
等的实际 typedef
在 .../bits/stringfwd 中。 h
.例如,如果您需要使用其他模板参数实例化 std::basic_string
,那么您可以执行以下操作:
#include <bits/basic_string.tcc>
template class std::basic_string<long>;
libstdc++ 实现集合和映射(仅 header )的方式很有趣,但也非常复杂,因为它使用自定义红黑树实现 (_Rb_tree
)。
std::vector
的 libstdc++ 实现(也是仅 header )更加独立,因此值得一看 /usr/include/c++/4.4.4/bits/STL_vector.h
让您了解 libstdc++ 的内部结构。另一个有趣的文件是 .../bits/STL_algo.h
,其中包含 STL 算法的定义。
注意:在装有 MinGW 的 Windows 上,您会在 MinGW 的 lib\gcc\mingw32\4.4.0\include\c++\bits
中找到 libstdc++ header 安装,将“4.4.0”替换为 g++ -dumpversion
。
关于c++ - gnu gcc 站点上的标准 C++ 库 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3171535/