Стандартные заголовки библиотек C ++ на сайте gnu gcc - PullRequest
1 голос
/ 03 июля 2010

Я хочу просмотреть исходный код реализации стандартных библиотек 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 string sth like: typedef basic_string string;должен был присутствовать в заголовке строки, но я его здесь не вижу.

Вопросы: - в каком файле содержится определение символа строки?- Я вижу, что файл заголовка строки включает в себя много заголовков, и, если в одном из этих внутренних заголовков определен символ typedeffed sring, есть ли на этом сайте строка поиска, через которую я могу сразу перейти к определению символа.(если кто-то уже просматривал материалы с этого сайта ранее)

Спасибо, Джаграти

Ответы [ 3 ]

4 голосов
/ 03 июля 2010

Большая часть 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.Фактические 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).

Реализация libstdc ++ std::vector (также только для заголовка) более автономна, поэтому стоит взглянуть на/usr/include/c++/4.4.4/bits/stl_vector.h, чтобы дать вам представление о внутренностях libstdc ++.Другой интересный файл - .../bits/stl_algo.h, который содержит определения алгоритмов STL.

Примечание: В Windows с MinGW вы найдете заголовки libstdc ++ в lib\gcc\mingw32\4.4.0\include\c++\bits вашей установки MinGW, заменив '4.4.0' на g++ -dumpversion.

1 голос
/ 03 июля 2010

Быстрый grep сказал мне, что typedef basic_string<char> string в bits/stringfwd.h.Я использую gcc 4.5.0.

1 голос
/ 03 июля 2010

Вы можете найти то, что вам нужно, прямо в /usr/include/c++: поскольку стандартная библиотека тегов состоит из шаблонов, большая часть кода помещается непосредственно в заголовочные файлы.

Также я попытался прочитать их один раз,но поверь мне: ты не хочешь этого делать.:) Серьезно, это немного грязно.

...