在大多數(shù)情況下,我們?nèi)菀状_定某次調(diào)用應(yīng)該選用哪個(gè)重載函數(shù)婴谱。
然而當(dāng)幾個(gè)重載函數(shù)的形參數(shù)量相等以及某些形參的類型可以由其它類型轉(zhuǎn)換得來(lái)時(shí),這項(xiàng)工作就不那么容易了。
函數(shù)匹配的第一步時(shí)選定本次調(diào)用對(duì)應(yīng)的重載函數(shù)集驻子,集合中的函數(shù)稱為候選函數(shù)。其具備兩個(gè)特征:一是與被調(diào)用的函數(shù)同名册着,二是其聲明在調(diào)用點(diǎn)可見拴孤。
第二步參考調(diào)用時(shí)提供的實(shí)參,然后從候選函數(shù)中選出能被這組實(shí)參調(diào)用的函數(shù)甲捏,這些新選出的函數(shù)稱為可行函數(shù)演熟。
可行函數(shù)有兩個(gè)特征:一是其形參數(shù)量與本次調(diào)用提供的實(shí)參數(shù)量相等,二是每個(gè)實(shí)參的類型與對(duì)應(yīng)的形參類型相同,或者能轉(zhuǎn)換成形參的類型芒粹。
函數(shù)匹配的第三步是從可行函數(shù)中選擇與本次調(diào)用最匹配的函數(shù)兄纺。在這一過(guò)程中,逐一檢查函數(shù)調(diào)用提供的實(shí)參化漆,尋找形參類型與實(shí)參類型最匹配的那個(gè)可行函數(shù)估脆。
當(dāng)實(shí)參的數(shù)量有兩個(gè)或更多時(shí),編譯器依次檢查每個(gè)實(shí)參以確定哪個(gè)函數(shù)是最佳匹配座云,如果有且只有一個(gè)函數(shù)滿足下列條件疙赠,則匹配成功:
該函數(shù)每個(gè)實(shí)參的匹配都不劣于其它可行函數(shù)需要的匹配。
至少有一個(gè)實(shí)參的匹配優(yōu)于其它可行函數(shù)提供的匹配朦拖。
為了確定最佳匹配圃阳,編譯器將實(shí)參類型到形參類型的轉(zhuǎn)換劃分成幾個(gè)等級(jí):
如果重載函數(shù)的區(qū)別在于它們的飲用類型的形參是否飲用了const ,或者指針類型的形參是否指向 const ,則當(dāng)調(diào)用發(fā)生時(shí)編譯器通過(guò)實(shí)參是否是常量來(lái)決定選擇哪個(gè)函數(shù)璧帝。