C++ primer第六章6.6函数匹配
生活随笔
收集整理的這篇文章主要介紹了
C++ primer第六章6.6函数匹配
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
函數(shù)的匹配
- 當(dāng)重載函數(shù)的形參數(shù)量相等以及某些形參的類型可以由其他的類型轉(zhuǎn)化得來的時(shí)候,對(duì)于函數(shù)的匹配就會(huì)變得很難
確定候選函數(shù)和可行函數(shù)
- 函數(shù)匹配的第一步就是選定本次調(diào)用對(duì)應(yīng)的重載函數(shù)集,集合中的函數(shù)稱為候選函數(shù)。候選函數(shù)具有兩個(gè)特征:1,與被調(diào)用的函數(shù)同名;2,聲明在調(diào)用點(diǎn)是可見的。
- 第二步,考察本次調(diào)用所提供的形參,然后從候選函數(shù)中選出能被這組實(shí)參調(diào)用的函數(shù),這些新的選出的函數(shù)叫做可行函數(shù)。可行函數(shù)具有兩個(gè)特征:1,形參變量和本次調(diào)用的形參數(shù)量相等;2,實(shí)參的類型和本次調(diào)用的從形參的類型相同,或者是可以轉(zhuǎn)化成形參類型的實(shí)參。
- 注意:如果函數(shù)含有默認(rèn)的實(shí)參,那么在調(diào)用函數(shù)的時(shí)候,可能傳入實(shí)參的數(shù)量看能小于他實(shí)際使用的數(shù)量
尋找最佳匹配
- 函數(shù)匹配的第三步是從可行函數(shù)中選擇與本次調(diào)用最為接近匹配的函數(shù)。原則是:實(shí)參類型和形參類型越接近,那么函數(shù)匹配的越好
含有多個(gè)形參的函數(shù)匹配
- 實(shí)參的數(shù)量越多,匹配的難度越大
- 條件:1,該函數(shù)的每一個(gè)實(shí)參的匹配都不會(huì)劣于其他可行的函數(shù)需要的匹配;2,至少有一個(gè)實(shí)參的匹配優(yōu)于其他函數(shù)提供的匹配。
- 調(diào)用重載函數(shù)的時(shí)候應(yīng)該盡量避免使用強(qiáng)制類型轉(zhuǎn)換。
6.6.1 實(shí)參類型轉(zhuǎn)換
- 為了確定最佳的匹配,編譯器將實(shí)參類型轉(zhuǎn)化分為幾個(gè)等級(jí)
需要類型的提升和算術(shù)類型的轉(zhuǎn)換的匹配
- 假設(shè)有兩個(gè)同名的函數(shù),一個(gè)接收int類型,一個(gè)接收short類型。則只有當(dāng)調(diào)用提供的是short類型,才會(huì)去調(diào)用shaort版本的函數(shù)。因此有的時(shí)候,即使是一個(gè)很小的整數(shù)值,也會(huì)將其聲明為int類型;此時(shí)使用short版本反而會(huì)導(dǎo)致類型的轉(zhuǎn)換。
- 所有的算術(shù)類型的轉(zhuǎn)換的級(jí)別都是一樣的,從int向unsigned int的轉(zhuǎn)換,并不會(huì)比從int 向double轉(zhuǎn)換級(jí)別高。
函數(shù)匹配和const實(shí)參
- 如果重載函數(shù)的區(qū)別在于他們的引用類型的實(shí)參是否引用了const,或者指針類型的形參是否指向了const,則當(dāng)調(diào)用發(fā)生的時(shí)候編譯器通過實(shí)參是否是常亮來決定選擇哪個(gè)函數(shù)。
- 第一個(gè)調(diào)用中,傳入的是const對(duì)象a,因?yàn)椴豢梢园哑胀ㄒ媒壎ǖ絚onst對(duì)象上,所以此例中唯一可行的函數(shù)是以常量引用作為形參的那個(gè)函數(shù),并且調(diào)用該函數(shù)與實(shí)參a精確匹配。
- 第二個(gè)調(diào)用中,傳入的是非常量b,對(duì)于這個(gè)調(diào)用來說,兩個(gè)函數(shù)都是可行的,既可以使用b初始化常量的引用,也可以用它來初始化非常量的引用。然后,使用非常量對(duì)象初始化常量的引用需要類型的轉(zhuǎn)換,接收非常量形參的版本則和b精確匹配。
- 指針類型的形參也是類似的。唯一的區(qū)別在于指針的形參指向的是常量還是非常量。實(shí)參指向的是常量的指針,則會(huì)調(diào)用形參是const*的函數(shù);如果實(shí)參是指向非常量的指針,調(diào)用形參是普通指針的函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的C++ primer第六章6.6函数匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人所得税为什么退不了 有5点原因
- 下一篇: C++中size_t的学习