c++模板阶乘计算

C++ template factorial computation

本文关键字:计算 阶乘 c++      更新时间:2023-10-16

假设我有这样的代码:

template <int n>
class Factorial
{
    public:
        static const int f = Factorial<n-1>::f*n;
};
template<>
class Factorial<0>
{
    public:
        static const int f =1;
};

这是一个用来计算阶乘的模板。它应该在编译时计算。在编译时通过模板执行计算通常是合理的(特别是:更快)吗?P.S.对不起,如果这个问题之前已经问过和回答过了,我搜索了这个问题,只发现了类似的问题。

如果你可以在编译时计算一些东西,你应该这样做,除非这会使你的代码变得非常复杂。通常,编译器会在编译时为您计算常数子表达式。然而,你所展示的计算是不同的,因为它使用模板作为图灵完备的编程系统。

这个特殊的模板旨在提供一个简单的演示,说明如何在编译时计算一些东西。该程序看起来非常像Prolog程序:它由一个简单的基本情况和一个递归简化步骤组成。这类程序的问题在于它们非常难以理解。尽管在某些情况下编译时计算可以帮助您构建可靠的软件,但是这些方法的适用性是有限的,因为它们创建了重要的维护责任。