泛型程式設計筆記(re迭代)

2021-06-19 09:55:22 字數 1897 閱讀 5920

《c++ primer》p232

what

函式匹配

函式匹配的3種可能:

a)找到最佳匹配,編譯成功

b)找不到匹配,編譯錯誤

c)when 當存在多個與實參匹配的函式,但沒有乙個是明顯的最佳選擇。則編譯錯誤,因為具有二義性

why 要掌握函式匹配的步驟:

1)編譯成功,但意想不到的匹配結果 2)編譯失敗,因為有二義性

when:當多個函式的形參具有可通過隱式轉換關聯起來的型別,則函式匹配將相當靈活。在這種情況下,需要程式設計師充分掌握函式匹配的過程

過載函式的函式匹配的3個步驟:

1)確定候選函式(即,過載函式函式集合):what

候選函式:1)候選函式是與被調函式同名的函式 2)在呼叫點上,它的宣告可見

2)在候選函式集合中,選擇可行函式what

可行函式,即函式呼叫合法 1)函式形參個數與實參個數相同 2)每個實參型別必須與對應形參型別匹配,或者可被隱式轉換為對應的形參型別3)注意:要將預設函式考慮進去,被呼叫函式所用的實參可能比實際需要的少

3)在可行函式集合中,尋找最佳匹配(如果有的話):what

最佳匹配:實參型別與形參型別越接近則匹配越佳。所以,精確型別匹配要比需要轉換的匹配好

4)含有多個形參的函式匹配的最佳匹配選擇

編譯器依次檢查每乙個實參來決定哪個或哪些函式匹配最佳。如果《有且僅有乙個》函式滿足下列條件,則匹配成功:

a)其每個實參的匹配都不劣於其他可行函式需要的匹配

b)至少有乙個實參的匹配優於其他可行函式提供的匹配

如果在檢查了所有實參後,仍找不到唯一最佳匹配函式,則該呼叫錯誤,因為具有二義性

《c++ primer》p234

實參型別轉換:

為了確定最佳匹配,編譯器將實參型別到相應形參型別的轉換劃分等級。轉換等級以降序排列如下:

1)精確匹配what 

精確匹配:實參與形參型別相同

2)通過型別提公升(promotion)實現的匹配

3)通過標準轉換(standard conversion)實現的匹配

4)通過類型別轉換(class-type conversion)實現的匹配

《c++ primer》p537

what 

模板實參推斷:從函式實參確定模板實參型別和值的過程,叫做模板實參推斷

編譯器從函式實參的型別推斷模板形參的型別

how: 編寫模板定義,以及呼叫模板函式的注意事項:

1)多個型別形參的實參必須完全匹配

2)型別形參的實參的受限轉換

Java學習筆記 泛型程式設計

為了使編寫的 可以被很多不同型別的物件重用。例如,arraylist建立物件例項 arraylistfiles new arraylist string 型別引數乙個泛型類就是具有乙個或多個型別變數的類,pair類示例 public class pair public pair t first,t ...

泛型程式設計之泛型引數

問題 用c 語言實現求乙個數的平方。分析 乙個數,可以是int double complex等,規則求數的平方 x x 偽 sqrt x return x x 實現一 提供一組用於求不同數字型別的平方函式。int sqrtint int x int sqrtdouble double x 實現二 上...

C (泛型程式設計)學習筆記 4

1.函式const char c str c str 函式返回乙個指向正規c字串的指標,內容與本string串相同.這是為了與c語言相容,在c語言中沒有string型別,故必須通過string類物件的成員函式c str 把string 物件轉換成c中的字串樣式。2.sscanf 與scanf 類似,...