最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

C++自制心得——模板初步

2023-09-15 15:03 作者:這年頭起名可真不容易  | 我要投稿

我這里講的模板比較基礎,篇幅不長,后續(xù)會有模板的進階內容

1. 函數(shù)模板

盡管我們在以前用函數(shù)重載解決了Swap函數(shù)的命名問題,但這樣的方案存在缺陷,我們還是要為每個類型寫一個對應Swap函數(shù)。除了類型不同,?這些Swap函數(shù)的邏輯完全一致,如果能實現(xiàn)類型的自動替換,那就能解放雙手了,這就是泛型編程的邏輯

C++提供template(中文就叫模板)關鍵字實現(xiàn)泛型編程

其中的名字我們一般會用T系列表示,比方說T1, T2之類的,算是某種意義上的約定俗成

值得注意的是template定義的模板類型聲明范圍僅限它的下一個函數(shù)或類,出了范圍即刻失效,不用擔心多個模板情景下可能發(fā)生的模板類型重名問題(所以類模板的聲明定義分離定義處需要額外聲明一次模板)

這里問大家一個小問題,兩個Swap語句調用的同一個Swap函數(shù)嗎?

遇事不決,翻匯編代碼

哦,的確不是同一個函數(shù),不過,這兩個長的很怪的函數(shù)是怎么出現(xiàn)的?

實際上,它們是模板函數(shù)Swap的對應實例化函數(shù)。因為根據(jù)模板函數(shù)推導出的不同類型函數(shù)其函數(shù)棧幀開辟大小不同,并且內部邏輯存在一定差別,因此編譯器會提前推導并生成用到的實例化函數(shù),而非想象中的實時推導

換句話說,泛型編程不會與我們想象的一樣省略不同類型同一邏輯的函數(shù),它只是把程序員的工作變成了編譯器的工作(C和C++的編譯器真是兩個極端)

2. 類模板

除了函數(shù)模板,類也有模板,類模板實例化與函數(shù)模板實例化不同,類模板實例化需要在類模板名字后跟<>,然后將實例化的類型放在<> 中即可,類模板名字不是真正的類,而實例化的結果才是真正的類。

現(xiàn)在我們用模板類的方式實現(xiàn)了存儲不同類型的棧

類的聲明定義如下

請不要將類模板聲明定義放到不同的文件里,會出問題(模板進階會講)

3. 模板的實例化

模板實例化方式分隱式實例化和顯式實例化

3.1 隱式實例化

隱式實例化就是讓編譯器自動推導類型

這里,編譯器推導出的類型有int和double,但是模板只有一個參數(shù),編譯器不清楚用哪個類型實例化函數(shù),結果就是報錯

解決方案有兩種,一種就是強制類型轉換

同時,也可以選擇顯式實例化

3.2?顯式實例化

在函數(shù)名后的<>中指定模板參數(shù)的實際類型

如果類型不匹配,編譯器會嘗試進行隱式類型轉換,如果無法轉換成功編譯器將會報錯

4.?模板參數(shù)的匹配原則

1. 一個非模板函數(shù)可以和一個同名的函數(shù)模板同時存在


2. 對于非模板函數(shù)和同名函數(shù)模板,如果其他條件都相同,在調動時會優(yōu)先調用非模板函數(shù)而不會從該模板產生出一個實例。如果模板可以產生一個具有更好匹配的函數(shù), 那么將選擇模板


C++的基礎部分總算講了個七七八八,接下來就是C++中等難度的部分了------stl標準模板庫,難度進一步升級,敬請期待

C++自制心得——模板初步的評論 (共 條)

分享到微博請遵守國家法律
井陉县| 江阴市| 唐山市| 偏关县| 腾冲县| 鄂伦春自治旗| 清涧县| 玉环县| 登封市| 正宁县| 崇仁县| 武穴市| 都兰县| 喜德县| 洪江市| 广水市| 高州市| 浙江省| 泾源县| 盐山县| 宁南县| 来凤县| 莲花县| 大邑县| 文水县| 尤溪县| 平度市| 苏尼特右旗| 山阴县| 翁牛特旗| 新巴尔虎左旗| 蕲春县| 屏山县| 平昌县| 南漳县| 安陆市| 永济市| 江山市| 遵义市| 永安市| 融水|