C Template 讀書筆記 第五章

2021-07-04 15:19:04 字數 1817 閱讀 8941

內容:技巧性基礎知識

關鍵字:typename     .template    this->     模板的模板引數       零初始化        字串的模板實參

具體內容描述

1.  對模板使用typename

場景:template

class test

這裡需要增加typename,需要標記告訴編譯器這個是宣告乙個模板引數型別t裡面的subtype型別的指標,指明t::subtype是乙個型別

如果不指定typename,編譯器認為是t裡面的乙個靜態成員

2.   使用模板引數時附帶.tmpelate關鍵字

場景template

void printbitset (std::bitsetconst &bs)

std::cout<,allocator> ();    //這裡在bs後面增加.template

這裡和上面typename類似也是告訴編譯器這裡要對to_string模板函式進行處理,to_string後面緊跟的《不是小於符號是模板引數列表的開始標示

我們可以做乙個比較,bs裡面的to_string函式分為普通函式和模板函式來對比

bs.to_string()

bs.to_string()

在使用to_string函式時不告訴編譯器這個to_string函式是乙個模板函式,那麼緊跟函式後面的《將被認為是小於符號

擴充套件:可以擴充套件到使用乙個模板引數t裡面的乙個模板函式需要增加::template,是乙個指標時需要增加->template

3.    在模板類中使用this->

場景template

class base;

template

class test : public base

使用stacktest;  使用預設容器。

如果換容器會是怎樣?

stack> test 這裡需要顯示的指明

那就定義乙個模板的模板引數來去掉這個顯示的指明

templateclass cont=std::vector>

class stack

使用stacktest,這裡會完成自動推演出來-------------函式模板沒有模板的模板引數這回事!!!!!!!!

注意:i    模板的模板引數中如果elem沒有被使用可以不用顯示寫出來

ii    模板的模板引數需要精確的實參匹配,所以最新的stack的宣告為

template >class cont=std::vector>

class stack

5 零初始化

零初始化時指宣告的乙個命令都能夠被正確初始化,比如乙個內建型別int,這宣告後的指是不確定的必須要顯性的初始化賦值才行。

這個問題的模板中可以得到解決,看下面的例子

template

vod fun();   //這裡是函式實體

max("111","222");  //兩個版本都沒問題

max("1111","222"); //版本二編譯不通過---------這裡的引數和上面的不同只有引數的長度不同,問題也就是出在字串引數的長度上

模板的引用方式,對字串演繹為字元陣列,長度為3和長度為4的陣列對模板來說是不同型別---稱為decay,而值引用都是指標char *

針對這個問題給出的建議:

1.使用非引用函式模板,但可能會導致無用拷貝

2. 過載引用版本和非引用版本,可能會引數二義性 

3. 過載陣列型別

template

t const * mac(t const(&a)[n], t const(&b)[m])

4. 對具體型別進行過載,或者要求使用顯示型別轉換處理

第五周讀書筆記

高效程式的奧秘 讀後感 一 這周開始了 高效程式的奧秘 為什麼選擇這本書作為這次讀書筆記的內容,是因為在上一次的個人作業中,我自己編寫程式的低效,給我留下了深刻的印象,乙個170mb的資料夾下檔案詞數的統計,竟然要花上10分鐘的時間 這還是我調整了資料結構的情況下 在調整之前,甚至程式無法執行完畢,...

《創新者》讀書筆記 第五周讀書筆記

創新者一書,實際上是這連個世界以來資訊科技的編年史,注重介紹了歷史潮流中的創新者,但這不意味著作者宣揚個別天才帶領了技術的進步,相反,作者強調了創新者所處環境對其的影響,在創新中的作用,展現了那些天才創新者的必然。作者想要揭示的是 科技革命不是一兩個天才的成就,而是一群人的努力,創新的起源不是乙個簡...

第五章 讀書筆記

第五章 搭建s3c6410開發板的測試環境 一.s3c6410開發板簡介.s3c6410是三星公司推出的一款低功耗,高價效比的risc處理器,它基於arm11核心,可廣泛應用於移動 和通用處理器等領域。該處理器有乙個非常先進的3d加速器,能實現4m s的3d加速 二.安裝串列埠除錯工具 minico...