最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中函數(shù)匹配機(jī)制詳解

 更新時(shí)間:2022年02月11日 09:37:17   作者:__JAN__  
大家好,本篇文章主要講的是C++中函數(shù)匹配機(jī)制詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

首先,編譯器會(huì)確定候選函數(shù)然后確定可行函數(shù)可行函數(shù),再?gòu)目尚泻瘮?shù)中進(jìn)一步挑選

候選函數(shù):重載函數(shù)集中的函數(shù)

可行函數(shù):可以調(diào)用的函數(shù)

最后進(jìn)行尋找最佳匹配

有以下幾種規(guī)則

1.該函數(shù)的每個(gè)實(shí)參的匹配都不劣于其他可行函數(shù)

2.至少有一個(gè)實(shí)參的匹配優(yōu)于其他可行函數(shù)的匹配

3.滿足上面兩種要求的函數(shù)有且只有一個(gè)

如果上面三個(gè)要求都沒(méi)滿足,則出現(xiàn)二義性

一些演示

各有一個(gè)精確匹配的實(shí)參,編譯器報(bào)錯(cuò),不滿足條件3

error

void func(int a,int b)
{
    cout << "(int,int)" << endl;
}
void func(double a, double b = 3.14)
{
    cout <<"(double,double = 3.14)" << endl;
}
int main()
{
    func(2.3,5);
}

調(diào)用函數(shù)類(lèi)型轉(zhuǎn)換優(yōu)先級(jí),依次遞減

1.精確匹配

包含三種

(1)實(shí)參形參類(lèi)型匹配

(2)從數(shù)組或者函數(shù)轉(zhuǎn)到對(duì)應(yīng)的指針

(3)添加或者刪除頂層const

2.通過(guò)const轉(zhuǎn)換實(shí)現(xiàn)匹配

3.通過(guò)類(lèi)型提升匹配

4.通過(guò)算術(shù)類(lèi)型轉(zhuǎn)換或者指針轉(zhuǎn)換的匹配

5.通過(guò)類(lèi) 類(lèi)型轉(zhuǎn)換實(shí)現(xiàn)的匹配

小整形一般提升為int或者long,即便他的面量很小

void func(int a)
{
    cout << "(int)" << endl;
}
void func(short a)
{
    cout << "(short)" << endl;
}
int main()
{
    func(12);
    func('a');
}

 運(yùn)行結(jié)果

所有算數(shù)類(lèi)型級(jí)別轉(zhuǎn)換都一樣

error

void func(double a)
{
    cout << "(double)" << endl;
}
void func(float a)
{
    cout << "(float)" << endl;
}
int main()
{
    func(3.14);
}

不能重載const 和非const兩個(gè)版本,但是引用可以 

關(guān)于引用:非const可以升級(jí)為const,但是const不能降級(jí)為非const

若有兩種版本——const and not const,會(huì)根據(jù)傳入的參數(shù)自動(dòng)匹配

void func(const int &a)
{
    cout << "(const int&)" << endl;   
}
void func(int &a)
{
    cout << "(int&)" << endl;
}
int main()
{
    const int a = 3;
    int b = 4;
    func(a);
    func(b);
    func(5);
}

運(yùn)行結(jié)果

 指針的情況于引用類(lèi)似:

如果兩個(gè)函數(shù)唯一的區(qū)別是他們指向的對(duì)象是常量或非常量,則編譯器根據(jù)實(shí)參選擇函數(shù)。

演示

void func(const int *a)
{
    cout << "(const int *)" << endl;
}
void func(int *)
{
    cout << "(int *)" << endl;
}
 
int main()
{
    int a = 3;
    int *pa = &a;
    const int *c_pa = &a;
    const int b = 4;
    const int *pb = &b;
    func(pa);
    func(c_pa);
    func(pb);
}

運(yùn)行結(jié)果

 上面提到過(guò)的一些重載

using namespace std;
 
void func(int a)
{
    cout << "(int)" << endl;
}
void func(double a)
{
    cout << "(double)" << endl;
}
void func(int a,int b)
{
    cout << "(int,int)" << endl;
}
void func(double a, double b = 3.14)
{
    cout <<"(double,double = 3.14)" << endl;
}
void func(short a)
{
    cout << "(short)" << endl;
}
void func(float a)
{
    cout << "(float)" << endl;
}
void func(const int &a)
{
    cout << "(const int&)" << endl;
}
void func(int &a)
{
    cout << "(int&)" << endl;
}
void func(const int *a)
{
    cout << "(const int *)" << endl;
}
void func(int *)
{
    cout << "(int *)" << endl;
}

到此這篇關(guān)于C++中函數(shù)匹配機(jī)制詳解的文章就介紹到這了,更多相關(guān)C++函數(shù)匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一個(gè)string類(lèi)的簡(jiǎn)單實(shí)現(xiàn)案例

    一個(gè)string類(lèi)的簡(jiǎn)單實(shí)現(xiàn)案例

    下面小編就為大家?guī)?lái)一篇一個(gè)string類(lèi)的簡(jiǎn)單實(shí)現(xiàn)案例。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C++中的友元函數(shù)與友元類(lèi)詳情

    C++中的友元函數(shù)與友元類(lèi)詳情

    這篇文章主要介紹了C++中的友元函數(shù)與友元類(lèi)詳情,對(duì)類(lèi)的封裝是C++三大特性中的一個(gè)重要特性,封裝好的數(shù)據(jù)在類(lèi)的外部是訪問(wèn)不到的但是一旦出了問(wèn)題,想要操作被封裝的數(shù)據(jù)怎么辦呢?由此友元函數(shù)友元類(lèi)誕生了,下文我們來(lái)詳細(xì)來(lái)接一下具體的有緣類(lèi)吧
    2022-02-02
  • Visual?Studio2022下Opencv的配置圖文教程

    Visual?Studio2022下Opencv的配置圖文教程

    本文主要介紹了Visual?Studio2022下Opencv的配置圖文教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C語(yǔ)言實(shí)現(xiàn)基于最大堆和最小堆的堆排序算法示例

    C語(yǔ)言實(shí)現(xiàn)基于最大堆和最小堆的堆排序算法示例

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)基于最大堆和最小堆的堆排序算法示例,分別是基于最大堆的升序排序和基于最小堆的降序排序?qū)嵗?需要的朋友可以參考下
    2016-06-06
  • 詳解C++中stoi/stol/stoll函數(shù)的用法

    詳解C++中stoi/stol/stoll函數(shù)的用法

    這篇文章主要為大家詳細(xì)介紹了C++中stoi、stol、stoll函數(shù)的具體用法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)校C++有一點(diǎn)的幫助,需要的可以參考一下
    2023-03-03
  • C++ 中CloseHandle 函數(shù)--關(guān)閉一個(gè)句柄

    C++ 中CloseHandle 函數(shù)--關(guān)閉一個(gè)句柄

    這篇文章主要介紹了C++ 中CloseHandle 函數(shù)--關(guān)閉一個(gè)句柄的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Qt利用ffmpeg實(shí)現(xiàn)音視頻同步

    Qt利用ffmpeg實(shí)現(xiàn)音視頻同步

    這篇文章主要為大家詳細(xì)介紹了Qt如何利用ffmpeg實(shí)現(xiàn)音視頻同步的功能,文中的示例代碼講解詳細(xì),對(duì)大家深入了解Qt有一定的幫助,需要的可以參考一下
    2023-01-01
  • c++類(lèi)型轉(zhuǎn)換及RTTI運(yùn)行階段類(lèi)型識(shí)別

    c++類(lèi)型轉(zhuǎn)換及RTTI運(yùn)行階段類(lèi)型識(shí)別

    這篇文章主要為大家介紹了c++類(lèi)型轉(zhuǎn)換及RTTI運(yùn)行階段類(lèi)型識(shí)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05
  • c++11新增的便利算法實(shí)例分析

    c++11新增的便利算法實(shí)例分析

    這篇文章主要介紹了c++11新增的便利算法,主要有用于判斷、查找、數(shù)組、序列等的操作算法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • C++中線性代數(shù)計(jì)算Eigen庫(kù)的使用教程詳解

    C++中線性代數(shù)計(jì)算Eigen庫(kù)的使用教程詳解

    Eigen是一個(gè)基于線性代數(shù)的C++模板庫(kù),主要用于矩陣、向量、數(shù)值求解和相關(guān)算法,本文主要為大家簡(jiǎn)單聊聊Eigen庫(kù)的使用,希望對(duì)大家有所幫助
    2023-12-12

最新評(píng)論

屯昌县| 三明市| 奉节县| 烟台市| 常宁市| 本溪| 碌曲县| 扬州市| 宁晋县| 夏津县| 陇川县| 和平区| 平江县| 尚义县| 大悟县| 会泽县| 天水市| 静乐县| 沭阳县| 长乐市| 瑞昌市| 聊城市| 梨树县| 敖汉旗| 东港市| 定安县| 焦作市| 分宜县| 平谷区| 襄垣县| 格尔木市| 宝应县| 桦甸市| 阿拉善右旗| 新平| 财经| 垫江县| 宁城县| 鄯善县| 渝中区| 安仁县|