c++ 默認(rèn)函數(shù)參數(shù)

以為是重載,其實(shí)是默認(rèn)函數(shù)參數(shù)

在閱讀Android源碼的時(shí)候,碰到了函數(shù)調(diào)用的參數(shù)個(gè)數(shù)與函數(shù)定義時(shí)對(duì)不上的情況,一開始以為是重載,但后來發(fā)現(xiàn)是使用了默認(rèn)函數(shù)參數(shù)。情況如下:


Bcond形參的定義個(gè)數(shù)為5個(gè)

Bcond實(shí)參在調(diào)用時(shí)只有四個(gè)

在文件中,對(duì)Bcond只有一處定義,又不是重載,那么在調(diào)用的時(shí)候到底是如何調(diào)用的呢?但在Bcond函數(shù)定義的地方找到了定義處的貓膩:


函數(shù)在定義的時(shí)候給參數(shù)rhs默認(rèn)為0

如果沒有傳入rhs,那么默認(rèn)為0

默認(rèn)函數(shù)參數(shù)可以不傳參

為了驗(yàn)證我們的猜想,在查閱資料的同時(shí),也可以自己寫案例來實(shí)驗(yàn)一下:

#include <iostream>

using namespace std;

class Para{
    private:
        int m_a;
        double m_b;
    public:
        Para(int a, double b, int c = 2);
};

Para::Para(int a, double b, int c) : m_a(a), m_b(b){
    cout << m_a << endl;
    cout << m_b << endl;
    cout << c << endl;
}

int main(){
    Para(1, 2.6);
    return 0;
}

Para()構(gòu)造函數(shù)在定義的時(shí)候給變量c定義了默認(rèn)參數(shù)為2,在調(diào)用的時(shí)候并沒有給Para傳遞第三個(gè)參數(shù),依然可以打印出我們想要的結(jié)果:

默認(rèn)函數(shù)參數(shù)

如果我們依然給Para傳遞第三個(gè)參數(shù):Para(1, 2.6, 1);,結(jié)果如下:
給默認(rèn)函數(shù)傳參

結(jié)果輸出的是我們傳遞的參數(shù)。

函數(shù)的默認(rèn)參數(shù)可以不止一個(gè)

函數(shù)的默認(rèn)參數(shù)可以不止一個(gè)

默認(rèn)參數(shù)需要注意的地方

  1. 函數(shù)的默認(rèn)參數(shù)只能放在后面,像這樣定義就是錯(cuò)誤的:Para(int a, double b = 2.6, int c);
  2. 函數(shù)的默認(rèn)參數(shù)只能出現(xiàn)一次,即不可以在定義和聲明中重復(fù)出現(xiàn)比如:
    重復(fù)定義的錯(cuò)誤情況
  3. 函數(shù)的默認(rèn)參數(shù)可以出現(xiàn)在定義處,可以在聲明處。

在實(shí)驗(yàn)中發(fā)現(xiàn)一個(gè)有意思的現(xiàn)象,可以交叉定義,但是不推薦這么用:

交叉定義

c語(yǔ)言不支持默認(rèn)函數(shù)參數(shù)

c不支持
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容