c++數(shù)組類模板的實(shí)現(xiàn)

成都創(chuàng)新互聯(lián)公司專注于桓仁企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,成都做商城網(wǎng)站。桓仁網(wǎng)站建設(shè)公司,為桓仁等地區(qū)提供建站服務(wù)。全流程定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

1、預(yù)備知識(shí)

(1)模板參數(shù)不僅僅可以是類型參數(shù),還可以是數(shù)值型參數(shù)。

如:

template

<typename T, int N>//int N就是數(shù)值型參數(shù), 要注意這個(gè)int類型,因?yàn)檫@里要注意數(shù)值型參數(shù)的限制,下面有說數(shù)值型參數(shù)的限制。

void func()

{

T a[N];//使用模板參數(shù)來定義局部數(shù)組,模板的數(shù)值型參數(shù)來表示數(shù)組的大小。

}

func<double, 10>();//這樣進(jìn)行使用,數(shù)值型參數(shù),也就是第二個(gè)參數(shù)要是常量,因?yàn)檫@是數(shù)值型模板參數(shù)的限制造成的。

數(shù)值型模板參數(shù)的限制:變量不能最為模板參數(shù),浮點(diǎn)數(shù)不能作為模板參數(shù),類對(duì)象不能作為模板參數(shù)等。

本質(zhì):模板參數(shù)是在編譯階段被處理的單元,這點(diǎn)毋庸置疑,因?yàn)榫幾g器會(huì)首先對(duì)模板進(jìn)行編譯,因此,在編譯階段必須準(zhǔn)確無誤的唯一確定,變量是不能夠在編譯階段進(jìn)行確定的,所以變量

不可以作為模板參數(shù),浮點(diǎn)數(shù)因?yàn)樵谟?jì)算機(jī)的內(nèi)存中是不精確的,所以C++中不允許浮點(diǎn)數(shù)作為模板參數(shù)。類對(duì)象也不能在編譯的時(shí)候進(jìn)行唯一的確定,因?yàn)樗鋵?shí)就是一個(gè)變量,類的變量擺了。

(2)一道面試題,用你覺得最高效的方法求得1+到N的數(shù)值。

template

< int N >//數(shù)值型模板參數(shù)的函數(shù)類模板

class Sum

{

public:

static const int VALUE = Sum<N-1>::VALUE + N;

};

template

< >完全特化

class Sum< 1 >

{

static const int VALUE = 1;

};

int main(void)

{

cout << "1 + 2 + 3 + ... + 100 = " <<Sum<100>::VALUE <<endl;

return 0;

}

解釋:上面的程序中,類模板用的是數(shù)值型參數(shù),這點(diǎn)從模板參數(shù)為int就可以看出來,所以我們使用的時(shí)候,直接傳遞數(shù)值就行。VALUE是const的,并且有初始化,所以在編譯階段就會(huì)取得

VALUE這個(gè)常量的值,將其放入符號(hào)表中,同時(shí)VALUE又被static修飾,所以是放在全局?jǐn)?shù)據(jù)區(qū)的。當(dāng)編譯器編譯到VALUE時(shí),首先就會(huì)去獲取這個(gè)常量的值進(jìn)而放入符號(hào)表中,但是編譯器發(fā)現(xiàn)

要想取得VALUE的值,首先要取得N-1的值,要想取得N-1的值,要先取得N-1-1的值,知道N為1的時(shí)候,編譯器發(fā)現(xiàn)有這個(gè)類的特化,所以就用了這個(gè)特化的類,VALUE的值為1,因?yàn)橛羞f歸規(guī)程,

所以在返回的時(shí)候,N不斷的又+1,每次+1都會(huì)將加完的值放到VALUE這個(gè)常量中,直到N變到了N為止,也就是又一直加到了N,最后VALUE的值就完全取得完畢了,最后放入了符號(hào)表中。

這是一個(gè)高效的求和方法。因?yàn)榫幾g器在編譯的時(shí)候,這個(gè)VALUE的常量值就已經(jīng)確定了,我們后面cout去訪問這個(gè)值的時(shí)候,只是相當(dāng)于直接從符號(hào)表中將值取出來,所以高效。

這個(gè)高效的方法依賴了類模板技術(shù)、類模板完全特化技術(shù)、還依賴了類模板參數(shù)為數(shù)值型參數(shù)的技術(shù),還依賴了對(duì)const和static的理解。有了static才可以用作用域分辨符去訪問這個(gè)VALUE,

有了const才會(huì)在編譯階段將值確定,因?yàn)槌A康闹凳窃诰幾g階段確定的。

文章題目:c++數(shù)組類模板的實(shí)現(xiàn)
當(dāng)前鏈接:http://bm7419.com/article18/pscsdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、ChatGPT響應(yīng)式網(wǎng)站、企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設(shè)、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司