如何在c ++的编译时计算

时间:2012-10-19 07:27:28

标签: c++

如何计算某些数学表达式,即找出n的阶乘;在c ++的编译时间?

2 个答案:

答案 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描述了它的含义。它有一个特定的例子来计算编译时整数的阶乘。