Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
有人问过我关于静态对象的用法,我想我了解使用它们背后的症结,但是有一个特殊的情况使我感到困惑,我知道在代码中他们正在尝试使用递归调用来构建类似析因的机制,但确实无法理解代码将经历的不同阶段。
请观看实时演示here。
这段代码正在生成输出
这里到底发生了什么?
存在。它使逻辑有些混乱。
该功能可以很容易地实现为:
这一点比较容易理解。
最终效果是相同的:
现在,您可以了解程序如何产生输出。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
有人问过我关于静态对象的用法,我想我了解使用它们背后的症结,但是有一个特殊的情况使我感到困惑,我知道在代码中他们正在尝试使用递归调用来构建类似析因的机制,但确实无法理解代码将经历的不同阶段。
#include<iostream>
using namespace std;
template<short N> class C
{
private:
static C<N-1>c;
public:
static int const n = N*c.n;
};
template<> class C<0>
{
public:
static int const n =1;
};
int main()
{
cout<<C<5>::n<<endl;
return 0;
}
请观看实时演示here。
这段代码正在生成输出
120
。这里到底发生了什么?
最佳答案
不幸的是,这条线
static C<N-1>c;
存在。它使逻辑有些混乱。
该功能可以很容易地实现为:
template<short N> class C
{
public:
static int const n = N*C<N-1>::n;
};
template<> class C<0>
{
public:
static int const n = 1;
};
这一点比较容易理解。
最终效果是相同的:
C<5>::n = 5*C<4>::n
C<4>::n = 4*C<3>::n
C<3>::n = 3*C<2>::n
C<2>::n = 2*C<1>::n
C<1>::n = 1*C<0>::n
C<0>::n = 1
现在,您可以了解程序如何产生输出。
10-01 13:00