4

如何确定我的编译器 (g++) 对模板代码做了什么?

我正在使用 boost.proto(一个表达式模板库)在编译时评估一些数学表达式。代码正确评估表达式,但我想看看编译器是否已将表达式扩展为相当于手写 c 代码(即消除了所有临时代码),或者是否还有一些进一步的编译时优化要完成。

有没有办法查看编译器对模板做了什么?

谢谢

4

2 回答 2

2
g++ -S

被记录为“仅编译;不要组装或链接”。基本上你会得到汇编输出。

于 2011-06-30T10:04:06.460 回答
2

在模板实例化通过后,有几种方法可以查看 C++ 代码:

  • 使用gcc -fdump-tree-original(甚至-fdump-tree-all查看更多通行证)
  • 使用 Elsa C++ 解析器:http ://scottmcpeak.com/elkhound/sources/elsa/
  • 使用 Clang 和 LLVM C 后端——后者会给出最不可读的代码,但在某些情况下它仍然有用。Clang 本身也应该有一些 AST 转储功能。
于 2011-06-30T12:58:03.013 回答