Как узнать, какие функции я вызываю из стандартной библиотеки c ++? - PullRequest
0 голосов
/ 13 июня 2019

Допустим, я использую список c ++ stl, и я объявляю его и выполняю некоторые операции с ним. Как бы я увидел, какие конкретные функции внутри шаблона списка stl вызывает моя программа. Например, если у меня есть этот код:

 std::list<std::string> someList;
 someList = someOtherList;

Как я могу распечатать, какая именно функция конструктора в списке stl вызывает программа?

1 Ответ

1 голос
/ 14 июня 2019

На ваш вопрос есть два ответа:

  • Вы не можете.
  • Вы все еще можете сделать это немного.

Стандарт c ++ определяет только то, что должен делать STL, но не как.По определению вы не сможете сказать, что происходит извне.

Следовательно, именно реализация определяет то, что на самом деле делает ваша библиотека.Он может просто создать ваш список или написать веб-сервер Java для генерации списков c ++, выполнить его и вернуть вам результат.Вы не могли бы понять разницу.

Однако, не бойтесь.Есть еще две возможности получить нужную информацию.Во-первых, вы можете купить стандарт C ++ и посмотреть пример реализации STL.(К счастью, вы на самом деле получаете большинство из них бесплатно в cppreference.) Или вы можете использовать отладчик для пошагового выполнения кода во время выполнения, чтобы увидеть, какие функции вызываются.

Имейте в виду, что первый ответ был не простодля хихиканья.Вы можете столкнуться с серьезными проблемами с подходом отладки.Некоторые реализации STL не заботятся о читабельности.Они используют любой уродливый кусок с ++, который является самым быстрым и поэтому может быть очень трудным для понимания.Более того, некоторые библиотеки предоставляют только скомпилированные двоичные файлы и заголовочные файлы, поэтому не повезло при просмотре кода.

Тем не менее, попробуйте.Может быть, вы узнаете, что вы хотите.Если нет, вы все равно научитесь правильно использовать отладчик.: D

...