2010-07-03 36 views
1

我想浏览C++标准库 - 头文件以及实现的gnu实现源代码。 我已经登陆自己变成:gnu gcc站点上的标准C++库头文件

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

回答

4

许多libstdC++仅使用头文件实现,但STL的某些部分(如std::basic_string)已编译实现。

模板std::basic_string的声明位于/usr/include/c++/4.4.4/bits/basic_string.h(将'4.4.4'替换为g++ -dumpversion),并且实现在/usr/include/c++/4.4.4/bits/basic_string.tcc中。 std::stringstd::wstring等的实际typedef等在.../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算法的定义。

注:在Windows上使用MinGW,你会发现在你的MinGW安装lib\gcc\mingw32\4.4.0\include\c++\bits的的libstdC++头文件,g++ -dumpversion更换 '4.4.0'。

1

你可以找到你需要直接在/usr/include/c++什么:因为标准标签库是由模板组成,大部分代码是直接放置在头文件中。

此外,我试图阅读一次,但相信我:你不想这样做。 :)说真的,这有点混乱。

1

快速grep告诉我,typedef basic_string<char> string是在bits/stringfwd.h。我正在使用gcc 4.5.0