constexpr
?
template<int N>
int fat = N*(fat<N-1>);
template<>
int fat<0> = 1;
int main() {
return fat<5>;
}
我的直觉是它会产生这样的东西:
int fat0 = 1;
int fat1 = 1*fat0;
int fat2 = 2*fat1;
int fat3 = 3*fat2;
int fat4 = 4*fat3;
int fat5 = 5*fat4;
int main() {
return fat5;
}
我试着去看看
C++ Insights
template<int N>
const int fat = N*(fat<N-1>);
template<>
const int fat<0> = 1;
int main()
{
return fat<5>;
}
... 一点用都没有。
我的下一个尝试是使用
godbolt.org
,并查看是否存在任何差异:
令我惊讶的是,
! 模板版本大致有
双重的
现在,考虑到零开销原则,这些变量应该做些什么
重要的
P、 S.:为了进一步伤害我的大脑,MSVC采取了相反的方式,为模板版本生成的程序集实际上是
小3倍
而不是没有模板的版本。不过,我无法从生成的程序集中理解很多内容,所以我把它排除在了主要问题之外。