《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 類似,...