我了解使用模板创建编译时阶乘计算的著名示例,这样就不需要递归运行时计算。在这样的示例中,计算所需的所有值在编译时都是已知的。
但是我遇到了另一个使用模板计算数字幂的示例,我只是不明白这是对类似运行时递归函数的优化:
template<int n>
inline int power(const int& m) { return power<n-1>(m)*m;}
template<>
inline int power<1>(const int& m) { return m;}
template<>
inline int power<0>(const int& m) { return 1;}
cout << power<3>(m)<<endl;
显然,m
在这个例子中,在编译时是无法知道的。所以在运行时,仍然会执行一系列计算,结果与 基本相同m*m*m
,对吧?
对于这样的模板,它们是否具有明显的优势?也许我只是没有看到它。