【发布时间】:2012-10-09 18:42:29
【问题描述】:
如何计算一些数学表达式,即求 n 的阶乘;在 C++ 编译期间?
【问题讨论】:
-
除了模板元编程之外,您还可以使用 c++11
constexpr和递归。不幸的是,我现在无法检查。 -
这是一个家庭作业式的问题,加上读者粗鲁地拒绝了那些提供链接作为答案的人,他不想做任何研究,他想为他做。 .
标签: c++
如何计算一些数学表达式,即求 n 的阶乘;在 C++ 编译期间?
【问题讨论】:
constexpr 和递归。不幸的是,我现在无法检查。
标签: c++
Here 是一篇关于 C++ 模板元编程的 wiki 文章。
Here 是另一篇关于编译时函数执行的 wiki 文章。
Here 是关于阶乘的 SO 问题。
让我们以编译时计算阶乘的 wiki 示例为例。
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> 中明确提及),因此编译器能够生成所有需要的代码。之后,Factorial<4> 结构的 value 将为 24,以后可以像您自己硬编码一样使用它。
【讨论】:
欢迎来到所谓的模板元编程。
This page 描述了它是什么。它有一个具体的例子来计算编译时整数的阶乘。
【讨论】: