#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;elsereturn 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;
}/*运行结果:12751275
*/
通过以上的运行情况可知:sum<50>::number相当于fun(50)的结果,但是两者是有本质区别的。
fun(50)是通过递归函数来实现的,在实际运行时才得到结果。
但是sun<50>::number是在编译时就确定了结果!