日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ primer第六章6.6函数匹配

發(fā)布時(shí)間:2023/12/13 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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í)
  • 精確匹配,包括以下幾種情形:1,實(shí)參類型和形參類型一致;2,實(shí)參從數(shù)組類型轉(zhuǎn)化成對(duì)應(yīng)的指針類型。;3,向?qū)崊⑻砑禹攲拥腸onst或者從實(shí)參中刪除頂層的const
  • 通過const轉(zhuǎn)化實(shí)現(xiàn)匹配
  • 通過類型的提升實(shí)現(xiàn)的匹配
  • 通過算術(shù)類型轉(zhuǎn)換或者指針轉(zhuǎn)換實(shí)現(xiàn)匹配
  • 通過類類型轉(zhuǎn)換實(shí)現(xiàn)的匹配
  • 需要類型的提升和算術(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í)別高。
    void manip(long); void manip(float); mainip(3.24);//錯(cuò)誤,二義性調(diào)用

    函數(shù)匹配和const實(shí)參

    • 如果重載函數(shù)的區(qū)別在于他們的引用類型的實(shí)參是否引用了const,或者指針類型的形參是否指向了const,則當(dāng)調(diào)用發(fā)生的時(shí)候編譯器通過實(shí)參是否是常亮來決定選擇哪個(gè)函數(shù)。
    Record lookup(Account& );// 函數(shù)的參數(shù)是Account的引用 Record lookup(const Account&);//函數(shù)的參數(shù)是一個(gè)常量的引用 const Account a; Account b; lookup(a); //調(diào)用Record lookup(const Account& ); lookup(b); //調(diào)用Record lookup(Account& );
    • 第一個(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。