程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++模板遞歸深度的思考

C++模板遞歸深度的思考

編輯:C++入門知識

C++模板遞歸深度的思考


#include 
using namespace std;
template
class A
{
public:
    enum{ result = N + A::result};
};
template<>
class A<1>
{
public:
    enum{result=1};
};
int main()
{
    cout << A<500>::result << endl;
    //vs2013下面最多只能遞歸500的深度。
    //因為在編譯階段的遞歸深度是由限制的,不同的操作系統也不太一樣,
    //但是總的來說都不會太大。
    return 0;
}
#include
using namespace std;
template
class A
{
public:
    enum{ mid = (N+M) /2};
    static const int result = M+ A::result+A::result;
    //這裡運用了二分法大大的減少了遞歸的深度。
    //哈哈,這裡任意大的數字都不會報錯了,因為這裡類似於完全二叉樹的形式
    //遞歸下去,深度減少,運算的數字可以很大,只不過花費的時間比較多,像
    //我用20000來測試,大概等了30秒鐘。我勸大家不要測試太大的數字,雖然
    //不會報錯,但是對資源消耗的過多會使電腦卡死,我卡死2次,用200000測試的。
};
template
class A
{
public:
    static const int result = 0;
};
int main()
{
    cout << A<0, 10000>::result << endl;
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved