【问题标题】:Standard C++ libraries headers on gnu gcc sitegnu gcc 站点上的标准 C++ 库头文件
【发布时间】:2010-07-03 12:49:37
【问题描述】:

我想浏览 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 字符串; 应该已经出现在字符串标题中,但我在这里没有看到。

问题: --字符串符号的定义在哪个文件中? --我看到字符串头文件包含很多头文件,如果在这些内部头文件之一中定义了 typedeffed sring 符号,那么这个网站上是否有一个搜索栏,我可以通过它直接找到符号的定义。 (如果有人之前已经浏览过这个网站的东西)

谢谢, 贾格拉蒂

【问题讨论】:

    标签: c++ gcc stl gnu


    【解决方案1】:

    许多 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.tccstd::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算法的定义。

    注意:在装有 MinGW 的 Windows 上,您会在 MinGW 安装的 lib\gcc\mingw32\4.4.0\include\c++\bits 中找到 libstdc++ 标头,将“4.4.0”替换为 g++ -dumpversion

    【讨论】:

      【解决方案2】:

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

      我也试着读过一次,但相信我:你不想这样做。 :) 说真的,有点乱。

      【讨论】:

        【解决方案3】:

        一个快速的 grep 告诉我 typedef basic_string&lt;char&gt; stringbits/stringfwd.h 中。我正在使用gcc 4.5.0

        【讨论】:

          猜你喜欢
          • 2016-08-23
          • 1970-01-01
          • 2011-03-17
          • 2011-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-03
          • 1970-01-01
          相关资源
          最近更新 更多