C 程式語言讀書筆記 C13 模版

2021-06-09 14:21:24 字數 1659 閱讀 7554

1. template只是說c是乙個型別名,它不必一定是某個類的名字。

2. 在類模版名字後隨著由<>括起的乙個型別名,也就成為(由這個模版所定義的)乙個類的名字。

3. typedef在縮短由模版生成的長名字方面常常很有用處。另外,我們也經常希望不用去了解乙個型別究竟是怎樣定義的。typedef使我們可以隱藏起某個型別是由模版生成的這一事實。

typedef basic_stringstring;

4. 模版類的成員本身也是模版引數化的,與它們所在的模版類的引數一樣。在類外定義這些成員時,就必須顯式的將它們定義為模版。

5. 模版能夠直接支援通用型程式設計,即那種採用型別作為引數的程式設計。

6. 從乙個模版類和乙個模版引數生成乙個類宣告的過程通常被稱為模版例項化。針對乙個特定模版引數的模版版本稱為是乙個專門化。

7. 乙個模版引數可以用於定義跟隨其後的模版引數

templatechar cont;

8. 模版引數可以是常量表示式,具有外部鏈結的物件或者函式的位址,或者非過載的指向成員的指標。用作模版引數的指標必須具有&of的形式,其中of是物件或者函式的名字;或者具有f的形式,f必須是乙個函式名。到成員的指標必須具有&x::of的形式,這裡的of是乙個成員名。特別的,字串文字量不能被接受為模版的引數。整數模版引數必須是常量。乙個非型別的模版引數在模版的內部是乙個常量,企圖修改這種引數的值就是乙個錯誤。(有幾個不完全懂)

9. 在呼叫模版函式時,函式引數的型別決定到底應使用模版的那個版本,也就是說,模版的引數是有函式引數推斷出來的

10. 絕不會對類模版的引數做任何推斷

11. 如果不能從模版函式的引數推斷出某個模版引數,我們就必須顯式的去描述它。做這件事的方式與顯式的為模版類提供引數型別引數一樣:

templateclass vector {};

templatet* create();

void f()

顯式描述的最常見用途是為模版函式提供返回值型別

12. 與預設的函式引數一樣,在顯式的模版參數列中,只有位於最後的型別可以不給出

13. 如果乙個函式和乙個專門化具有同樣好的匹配,那麼就選用函式。因為這個原因,對於sqrt(2.0)將選用sqrt(double)而不是sqrt(double).

14. 可以通過顯式限定來消解歧義

15. 用於描述策略的模版引數常常被稱為特徵(traits)

16. 通用模版必須在所有專門化之前宣告

17. 說乙個專門化比另乙個更專門,如果能夠與它匹配的每個實際參數列也能與另外的那個專門化匹配,但反過來就不對。

18. 從乙個非模版類派生出乙個模版類,這是為一組模版提供乙個共同實現的一種方法。

templateclass vector: private vector{}

對這種示例還可以有另一種看法,這裡用乙個模版類為某種功能提供了乙個優美而且型別安全的介面。

p309的例子沒看太懂

19. 為了能有所區分,將虛函式提供的東西稱作執行時多型性,而把模版提供的稱為編譯時多型性或者引數式多型性。

20. 乙個類或者模版也可以包含本身就是模版的成員,例如

templateclass complex

};21. 成員模版不能是virtual

22. 為了使其他編譯單位能夠訪問,就必須將這個模版定義顯式的宣告為export,方式是為了定義或者定義之前的某個宣告上加上關鍵字export。

《c程式語言》讀書筆記

舉例如下 char a 10 1 定義的時候直接用字串賦值 char a 10 hello 注意 不能先定義再給它賦值,如 char a 10 a 10 hello 這樣是錯誤的!2 對陣列中字元逐個賦值 char a 10 3 利用strcpy char a 10 strcpy a,hello 易...

《C程式語言》 讀書筆記

在mac下可以使用sublime進行c語言程式編寫,然後通過命令列來執行c程式。在sublime新建乙個c程式,譬如 test.c include main 然後在命令列中執行 cc test.c編譯後會自動生成乙個a.out檔案,然後我們執行a.out檔案 test.c就會在命令行內列印出 hel...

C程式語言讀書筆記 5

double dp,atof char 表明,dp 和atof char 的值都是 double 型別的。該宣告中 atof 的引數是指向 char 型別的指標,指標必須指向特性型別的物件,但是 void 型別的指標可以存放指向任何型別的指標。陣列和指標的關係 陣列名所代表的指標就是該陣列最開始的乙...