【发布时间】:2015-01-26 17:53:16
【问题描述】:
从this question 的回答中,我发现了一个相当有趣的现象。给定以下两个函数:
void require(void * volatile) { }
template <typename T>
void requireT(T * volatile) { }
使用指向静态数据成员的指针调用每个成员将强制实例化该成员(这是另一个问题的目的),但是,requireT 将被完全优化掉,而@987654324@ 会影响生成的代码/二进制文件 (g++ 4.9.2)。
这是为什么?编译器对代码的处理方式有什么不同?
【问题讨论】:
-
什么是“影响”?请注意,非模板不是内联的,而模板是隐式内联的。
-
@Potatoswatter 隐式内联的模板函数是关键。您想将您的评论转换为答案吗?谢谢!
标签: c++ templates g++ volatile