gnu gcc站点上的标准C ++库头文件

时间:2010-07-03 12:49:37

标签: c++ gcc stl gnu

我想浏览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

3 个答案:

答案 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.tcctypedefstd::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