我想浏览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 string; 应该出现在字符串标题中,但我在这里看不到。
问题: - 哪个文件是字符串符号的定义? - 我看到字符串头文件包含很多标题,如果在这些内部标题之一中定义了typedeffed sring符号,那么这个网站上是否有搜索栏,我可以直接找到符号的定义。 (如果有人之前已经浏览过这个网站的东西)
谢谢, Jagrati
答案 0 :(得分:4)
很多libstdc ++仅使用头文件实现,但STL的某些部分(如std::basic_string
)已编译实现。
模板std::basic_string
的声明位于/usr/include/c++/4.4.4/bits/basic_string.h
(将{4.4}替换为g++ -dumpversion
),实施位于/usr/include/c++/4.4.4/bits/basic_string.tcc
。 typedef
,std::string
等的实际std::wstring
位于.../bits/stringfwd.h
。例如,如果您需要使用其他模板参数实例化std::basic_string
,那么您可以执行以下操作:
#include <bits/basic_string.tcc>
template class std::basic_string<long>;
libstdc ++实现集合和映射(仅限标题)的方式很有趣,但也非常复杂,因为它使用自定义的红黑树实现(_Rb_tree
)。
std::vector
的libstdc ++实现(也是仅限标题)更加自包含,所以在/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 ++标头,将{4.4}替换为g++ -dumpversion
。
答案 1 :(得分:1)
您可以在/usr/include/c++
中直接找到所需内容:由于标准标签库由模板组成,因此大部分代码都直接放在头文件中。
我也试过读一次,但请相信我:你不想这样做。 :)说真的,它有点乱。
答案 2 :(得分:1)
快速grep告诉我typedef basic_string<char> string
位于bits/stringfwd.h
。我正在使用gcc 4.5.0
。