c++ - C++ 中的递归结构

标签 c++

我找到了以下代码,它似乎可以工作,但我根本无法理解它。
它看起来像一个递归结构,但我以前从未见过。

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/

相关文章:

传递给 const 引用的 C++ 文字会导致自动构造

c++ - 生成一个可以通过Automake在一个步骤中编译并链接所有源文件的Makefile

c++ - 如何从具有 userID 和 pageID 的大型日志文件中查找最常访问的 3 个网页序列

c++ - C++中的UE4播放时间

c++ - 如何在编译时通过名称/指针获取模板参数默认值的函数类型?

c++ - 在 C++ 中使用函数指针时出现无效转换错误

c++ - SQL Server CE 删除性能

c++ - Qt - 用第二个线程更新主窗口

c++ - 使小部件在 Qt 布局中部分重叠

C++源码导入库