本篇內(nèi)容介紹了“c++ 顯示具體化和顯示實(shí)例化的詳細(xì)講解”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)十載經(jīng)驗(yàn)成就非凡,專業(yè)從事網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)頁(yè)制作,軟文發(fā)布平臺(tái),廣告投放平臺(tái)等。十載來(lái)已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:18982081108,我們期待您的來(lái)電!
今天看到c++ primer plus 第8章--函數(shù)探幽,其中模版函數(shù)一節(jié)有2個(gè)比較容易搞混的概念: 在此記錄以下:
先看模版函數(shù)的定義:個(gè)人認(rèn)為主要是為了節(jié)約代碼量,對(duì)不同的類型完成相同的操作,如果使用函數(shù)重載的話,對(duì)于基本數(shù)據(jù)類型整形,就有short/int/long/longlong 4種,還不包括unsigned和signed,因此需要大量的重載函數(shù),而內(nèi)容都是雷同的,浪費(fèi)復(fù)制粘帖的操作。因此采用模版函數(shù)來(lái)實(shí)現(xiàn)。
1、使用 template 或 template 放到函數(shù)開頭來(lái)聲明模版。其中typename是新標(biāo)準(zhǔn),class是為了向前兼容。因此寫class較為通用。
2、注意模版不能縮短可執(zhí)行文件長(zhǎng)度,在函數(shù)調(diào)用時(shí),必須依據(jù)給出的參數(shù)類型由編譯器生成實(shí)例化的模版函數(shù)(稱作隱式實(shí)例化 instance),即 int add(int a, int b); 因此模版函數(shù)只是將程序員要做的事交給了編譯器而已。
3、模版可以重載,見上圖的模版1和模版2、模版3,注意重載是用于改變輸入?yún)?shù)類型或增加、減少輸入?yún)?shù)個(gè)數(shù)(后者一般通過缺省參數(shù)實(shí)現(xiàn)?。。?。
我們輸入 add(1,2)得到3,并且顯示調(diào)用模版1;輸入 add(1,2,3) 得到6,調(diào)用模版2;輸入 add(1,'A')得到'B',調(diào)用模版3; 注意模版3中多個(gè)類型的寫法。
比如對(duì)于模版2而言,我們無(wú)法用其實(shí)現(xiàn) int*類型的加法,因此我們需要 specialize 這個(gè)模版,即對(duì)于int*型的輸入特例化(具體化)這個(gè)模版,使其可以與原始模版不同的功能。注意顯示具體化不能只聲明,一定要有函數(shù)體才可以,否則vs會(huì)報(bào)鏈接錯(cuò)誤?。。?/p>
我的理解是:顯示具體化拓寬的模版的應(yīng)用范圍!原本add函數(shù)只能對(duì)重載了“+運(yùn)算符”的類型使用,現(xiàn)在也可以對(duì)int 數(shù)組使用,但其實(shí)完全可以另寫一個(gè)函數(shù) add_array來(lái)實(shí)現(xiàn)這個(gè)功能,感覺就是為了好看(符合某種統(tǒng)一風(fēng)格)所以寫到一起!
模版的顯式實(shí)例化其實(shí)只是一個(gè)聲明:template int add(int,int); 注意template后沒有<>,而add后最好加上,即你自己要實(shí)例化的類型。
實(shí)際上對(duì)顯式實(shí)例化的作用我也不很清楚,因?yàn)樾薷暮瘮?shù)體的話使用具體化就可以了,實(shí)例化是不能帶函數(shù)體的,因此參考 http://bbs.csdn.net/topics/390559301,大概能得到結(jié)論:
cout< cout< cout< 此外顯式實(shí)例化還有一個(gè)作用: 根據(jù)《在同一文件中使用同類型的顯示實(shí)例化和顯示具體化會(huì)報(bào)錯(cuò)的特點(diǎn)》,先聲明顯示實(shí)例化,則后面的顯示具體化如果存在,會(huì)報(bào)錯(cuò),從而防止具體化該型模版?。?/strong> c++11中,好像可以先具體化,再實(shí)例化聲明,不會(huì)報(bào)錯(cuò) 調(diào)用優(yōu)先級(jí):普通函數(shù)>顯式具體化>顯式實(shí)例化>普通模版 顯式實(shí)例化用于人為選擇特定的類型! 顯式具體化用于修改某類型的函數(shù)具體功能! “c++ 顯示具體化和顯示實(shí)例化的詳細(xì)講解”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!總結(jié):
文章題目:c++顯示具體化和顯示實(shí)例化的詳細(xì)講解
文章URL:http://weahome.cn/article/ijedeg.html