如何查看我从 C++ 标准库调用了哪些函数?

How can I see what functions I call from a c++ standard library?

假设我使用 C++ stl 列表,我声明它并用它做一些操作。我如何查看我的程序正在调用的 stl 列表模板中的特定函数。例如,如果我有这个代码:

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

我怎样才能准确地打印出程序调用的 stl 列表中的哪个构造函数?

您的问题有两个答案:

  • 你不能。
  • 你还是可以做一点的。

c++ 标准只定义了 STL 应该做什么,但没有定义如何做。根据定义,你应该不可能从外面知道发生了什么。

因此,实现定义了您的库实际执行的操作。它可以只创建您的列表,也可以编写一个 Java 网络服务器来生成 C++ 列表,执行它并返回结果。你无法区分。

不过,不要害怕。仍然有两种可能获得一些你想要的信息。首先,您可以购买 c++ 标准并查看 STL 的示例实现。 (幸运的是,您实际上在 cppreference 上免费获得了大部分。)或者,您可以使用调试器在执行时单步执行代码以查看调用了哪些函数。

请注意,第一个答案不只是为了咯咯笑。您可以 运行 使用调试方法遇到严重问题。一些 STL 实现不关心可读性。他们使用最快的任何丑陋的 c++ 片段,因此可能很难理解。此外,一些库只提供编译后的二进制文件和头文件,因此无法查看代码。

尽管如此,还是试试吧。也许你会知道你想要什么。如果没有,您仍然可以通过正确使用调试器来学习。 :D