#include <iostream>
using namespace std;
template<int x>
class sum
{
public:
enum { number = x + sum<x-1>::number };
};
template<>
class sum<0> // 模板特化1
{
public:
enum { number = 0 };
};
template<>
class sum<1> // 模板特化2
{
public:
enum { number = 1 };
};
int fun(int n) // fun(n) = n + fun(n-1)
{
if(n == 1)
return 1;
else if(n == 0)
return 0;
else
return n + fun(n-1);
}
int main()
{
int x = sum<50>::number; // 相当于x = fun(50)
cout << x << endl;
int s = fun(50);
cout << s << endl;
return 0;
}
/*
运行结果:
1275
1275
*/
通过以上的运行情况可知:sum<50>::number相当于fun(50)的结果,但是两者是有本质区别的。
fun(50)是通过递归函数来实现的,在实际运行时才得到结果。
但是sun<50>::number是在编译时就确定了结果!