jk自慰喷水,国产又粗又黄又猛又爽高潮视频,国内伦理一级伦理麻豆,亚洲成人91

福州博洋教育

[J2EE] [其他計算機]
獵學(xué)網(wǎng)訂閱號
獵學(xué)網(wǎng)官方企業(yè)微信
位置: 獵學(xué)網(wǎng) > 學(xué)校機構(gòu) > 福州博洋教育 > 學(xué)習(xí)資訊> 博洋教育C++培訓(xùn):初識c++模板元編程

博洋教育C++培訓(xùn):初識c++模板元編程

412 2012-09-24

模板元編程(Template metaprogramming,簡稱TMP)是編譯器內(nèi)執(zhí)行的程序,編譯器讀入template,編譯輸出的結(jié)果再與其他源碼一起經(jīng)過普通編譯過程生成目標文件。通俗來說,普通運行程序是編譯器生成的機器碼,由處理器解釋執(zhí)行得到結(jié)果,TMP則是編譯器實例化template過程中得到結(jié)果。TMP已被證明是圖靈完備的機器,不過模板實例化通常需要消耗巨大的編譯器資源,而且難以追蹤錯誤,沒有合適的調(diào)試器,所以在實際開發(fā)中很少使用。

TMP有兩個重要的作用:

將工作從運行期轉(zhuǎn)移到編譯期,一些在運行期才能發(fā)現(xiàn)的錯誤在編譯時就找出來了。

產(chǎn)生較小的可執(zhí)行文件,較短的運行時間,較少的內(nèi)存需求。當(dāng)然代價就是增加了編譯時間。

下面讓我們來看一個利用TMP計算3的冪的例子

template

class Pow3 {

public:

enum {result=3*Pow3::result};

};

template<>

class Pow3<0> {

public:

enum {result=1};

};

int main() {

std::cout《"Pow3<7> = "《Pow3<7>::result《std::endl;

}

Pow<7>的實例化導(dǎo)致Pow3<6>的實例化,Pow3<6>又出發(fā)Pow3<5>的實例化,遞歸直至Pow3<0>結(jié)束,Pow<7>::result直接被常量值替換。

一個TMP程序可以包含以下幾部分:

狀態(tài)變量:即模板參數(shù)

迭代構(gòu)造:TMP沒有循環(huán)等構(gòu)件,全部用遞歸實現(xiàn),另一方面遞歸的實例化也是降低編譯器效率的主要原因。

路徑選擇:通過使用條件表達式或者特化。

整形算法(即枚舉)

c++中,在類內(nèi)部聲明常量值只有枚舉和靜態(tài)常量初始化兩種方式。上面的例子中可以將枚舉改成靜態(tài)常量,

template

class Pow3 {

public:

static int const result=3*Pow3::result;

};

template<>

class Pow3<0> {

public:

static int const result=1;

};

不過靜態(tài)常量是左值,如果將結(jié)果作為引用參數(shù)傳遞給一個函數(shù),

void foo(int const&);

foo(Pow3<7>::result);

編譯器必須獲取 Pow3<7>::result的地址,這會強制編譯器實例化靜態(tài)成員的定義,并分配內(nèi)存,這就跳出了編譯期范圍。

而枚舉不是左值,沒有這個約束,通過引用傳遞的時候跟使用常量值形式是一樣的,所以一般都用枚舉類型。

博洋教育(http://www.softfz.com/)教師簡介:彭坤容,高級C語言講師,12年教學(xué)經(jīng)驗。

1、做項目擁有一個團結(jié)、合作的團隊非常重要。

2、做項目時,從一開始一定要想好算法,然后按算法做才會事半功倍。在做的過程中,肯定會遇到難點,那么所要做的就是選擇最適合自己的方法做下去,它不一定是最好的,但確是自己最熟悉的,這樣就會很快的先把東西做出來,以后有時間再去研究如何改進。無論怎么做,提高的都是技術(shù)。這些技術(shù)如果以后還用得到,提高的就是做項目的進度。

3、做開發(fā),C語言功底還是十分重要的。有了好的功底,學(xué)什么語言都會很快,以后做項目多了,相關(guān)知識就會很快融會貫通。

溫馨提示: 專業(yè)老師1對1為您解答    馬上填寫,¥1000 元豪禮免費領(lǐng)!

掃一掃
獲取更多福利

×
獵學(xué)網(wǎng)