【发布时间】:2013-03-10 01:24:34
【问题描述】:
我不明白我遇到的这个例子:
int Multiply(int x, int m){ return x * m;} template<int m> int MultiplyBy(int x){ return x * m;} int a,b; a = Multiply(10,8); b = MultiplyBy<8>(10);在上面的例子中,模板函数比简单的更快 函数,因为编译器知道它可以乘以 2 使用移位操作。 x*8 被 x ,除非 函数可以内联。
据我了解,模板可以优化的原因是因为编译器在编译时知道参数 (8) 的值,而简单函数在运行之前不会知道 x (或 m) 的值-时间。那么内联简单函数将如何改变这一事实呢?内联不提供参数值的任何运行时知识??
【问题讨论】:
-
模板版本更快,因为您对其中一个操作数进行了硬编码。内联这两个版本将产生明显不同的代码,转储到汇编和对相同版本的检查可能会揭示这一点。由于它是二的幂,它会进一步增强吗?也许吧。
标签: c++ templates optimization inline-assembly