內容:技巧性基礎知識
關鍵字: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...