Fibonacci 的 template 使用:
1. Function Method
方法一:
下面这段代码会报错:template instantiation depth exceeds maximum of 1024 ....
template< int N >
int fibonacci( )
{
if ( N == 1 )
return 1;
else if ( N == 2 )
return 1;
else
return N + fibonacci< N-1 >();
}
方法二:
下面则正确
template< int N >
int fibonacci( )
{
return fibonacci< N -1 >() + fibonacci< N-2 >();
}
template< >
int fibonacci< 2 >( )
{
return 1;
}
template< >
int fibonacci< 1 >( )
{
return 1;
}
为什么方法一编译会出错??
也许解释为:template为"编译期间"展开,而如果if语句的值判断在“运行期”才生效的话,那么编译器展开template时则没有==1 or ==2 的判断条件了!
本文对比两种实现Fibonacci数列的模板方法:一种通过直接递归计算导致编译错误;另一种采用特化模板的方式成功实现。文章深入探讨了模板在编译阶段的工作原理,并解释了为何第一种方法会超出编译时的模板实例化深度。
592

被折叠的 条评论
为什么被折叠?



