如何确定编译器对元程序的作用? (对于boost.proto)

时间:2011-06-30 10:01:52

标签: c++ metaprogramming template-meta-programming boost-proto

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

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

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

由于

2 个答案:

答案 0 :(得分:2)

g++ -S

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

答案 1 :(得分:2)

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

  • 使用gcc -fdump-tree-original(甚至-fdump-tree-all查看更多通行证)
  • 使用Elsa C ++解析器:http://scottmcpeak.com/elkhound/sources/elsa/
  • 使用Clang和LLVM C后端 - 后者将提供最难以读取的代码,但在某些情况下仍然有用。 Clang本身也应该有一些AST转储功能。