如何确定我的编译器 (g++) 对模板代码做了什么?
我正在使用 boost.proto(一个表达式模板库)在编译时评估一些数学表达式。代码正确评估表达式,但我想看看编译器是否已将表达式扩展为相当于手写 c 代码(即消除了所有临时代码),或者是否还有一些进一步的编译时优化要完成。
有没有办法查看编译器对模板做了什么?
谢谢
如何确定我的编译器 (g++) 对模板代码做了什么?
我正在使用 boost.proto(一个表达式模板库)在编译时评估一些数学表达式。代码正确评估表达式,但我想看看编译器是否已将表达式扩展为相当于手写 c 代码(即消除了所有临时代码),或者是否还有一些进一步的编译时优化要完成。
有没有办法查看编译器对模板做了什么?
谢谢
g++ -S
被记录为“仅编译;不要组装或链接”。基本上你会得到汇编输出。
在模板实例化通过后,有几种方法可以查看 C++ 代码:
gcc -fdump-tree-original
(甚至-fdump-tree-all
查看更多通行证)