我找到了以下代码,它似乎可以工作,但我根本无法理解它。
它看起来像一个递归结构,但我以前从未见过。
template<int B, int N>
struct Pow {
enum{ value = B*Pow<B, N-1>::value };
};
template< int B >
struct Pow<B, 0> {
enum{ value = 1 };
};
int quartic_of_three = Pow<3, 4>::value;
知道这是什么吗?
最佳答案
这是一种在编译时计算积分幂的方法,依赖于支持必要数量的模板特化的编译器(即,它不是完全可移植的代码)
阅读你最喜欢的 c++ 教科书中的模板
如果您还没有 c++ 教科书:您需要它,请查看 SO FAQ C++ book list
在 C++11 中更好且(在几年内)可能更可移植的方法是使用 constexpr
函数:
#include <iostream>
using namespace std;
constexpr int constpow( int base, int n )
{
return (n == 0? 1 : base*constpow( base, n - 1 ));
}
int main()
{
int const quarticOfThree = constpow( 3, 4 );
wcout << quarticOfThree << endl;
}
然而,visual c++ 11.0 不支持,这是我撰写本文时最新版本的 visual c++
关于c++ - C++ 中的递归结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150589/