如何计算某些数学表达式,即找出n的阶乘;在c ++的编译时间?
答案 0 :(得分:2)
Here是一篇关于C ++模板元编程的wiki文章。
Here是另一篇关于编译时函数执行的wiki文章。
Here是关于阶乘的SO问题。
让我们在编译时采用计算阶乘的wiki xample。
template <int N>
struct Factorial {
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0> {
enum { value = 1 };
};
// Factorial<4>::value == 24
// Factorial<0>::value == 1
const int x = Factorial<4>::value; // == 24
const int y = Factorial<0>::value; // == 1
由于所需的所有参数在编译时都是已知的(例如,在Factorial<4>
中明确提到它们),编译器能够生成所有需要的代码。在此之后,value
结构的Factorial<4>
将为24,以后可以使用,就像您自己硬编码一样。
答案 1 :(得分:-1)
欢迎使用所谓的模板元编程。
This page描述了它的含义。它有一个特定的例子来计算编译时整数的阶乘。