我不明白我遇到的这个例子:
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 << ,这样更快。在简单函数的情况下,编译器不知道 m 的值,因此除非可以内联函数,否则无法进行优化。
据我了解,模板可以优化的原因是因为编译器在编译时知道参数 (8) 的值,而简单函数直到运行时才知道 x (或 m) 的值。那么内联简单函数将如何改变这一事实呢?内联不提供参数值的任何运行时知识?