我在这里找到了一个代码不带循环或条件打印 1 到 1000 https://stackoverflow.com/questions/4568645/printing-1-to-1000-without-loop-or-conditionals
有人可以解释一下编译时递归是如何工作的吗,在谷歌中找不到它
// compile time recursion
template<int N> void f1()
{
f1<N-1>();
cout << N << '\n';
}
template<> void f1<1>()
{
cout << 1 << '\n';
}
int main()
{
f1<1000>();
}
谢谢你!
它反复实例化f1<N>
具有递减值的模板N
(f1<N>()
calls f1<N-1>
等等)。明确的专业化N==1
结束递归:只要N
变为 1,编译器将选择专用函数而不是模板化函数。
f1<1000>()
导致编译器实例化f1<N>
999 次(不包括最后一次调用)f1<1>
)。这就是为什么编译大量使用模板元编程技术的代码可能需要一段时间的原因。
整个事情在很大程度上依赖于编译器的优化技能 - 理想情况下,它应该删除递归(这仅用作模拟for
完全循环使用模板)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)