如何查看编译器添加的代码?

how to see the code added by the compiler?

编译器如何查看C++中添加的代码?

例如,我们知道 当某个 class 的对象超出范围时,会调用该对象的析构函数,但是您如何查看析构函数调用的具体代码?该代码仍然是用 C++ 编写的吗?

它依赖于编译器并且是汇编语言。例如,对于 Microsoft 编译器,使用 /FAsc 进行编译将为每个目标文件生成一个 .cod 文件,其中包含汇编代码以及作为注释的原始 C++ 行。它还会显示对 constructors/destructors 的调用。

您可以向编译命令添加标志,这样您就可以在编译器完成的各个操作阶段查看文件。例如,-S 标志将生成一个文件,该文件本应完成预处理器和初始编译,但在汇编器运行之前。但是,此代码不会用 C++ 编写。

不一定会添加任何 "code"。 C++ 非常清楚此类事情何时发生,对于编译器而言,创建新对象显然意味着调用其构造函数——无需在任何地方添加 "code"。

你是对的,但是,对构造函数或析构函数的调用之类的事情必须在程序集中的某个地方结束——但绝对不能保证看一下程序集会揭示比你所拥有的更多的东西已知无。 C++ 编译器在这些方面已经相当成熟,并且在有意义的情况下内联了很多东西,使得相同的代码在不同的地方看起来不同。

您将获得的最接近的结果是将调试符号添加到您的构建中并使用调试器获取调用图——这将确保您注意到您看到的代码何时被调用。