以為是重載,其實(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ù)需要注意的地方
- 函數(shù)的默認(rèn)參數(shù)只能放在后面,像這樣定義就是錯(cuò)誤的:
Para(int a, double b = 2.6, int c); -
函數(shù)的默認(rèn)參數(shù)只能出現(xiàn)一次,即不可以在定義和聲明中重復(fù)出現(xiàn)比如:重復(fù)定義的錯(cuò)誤情況
- 函數(shù)的默認(rèn)參數(shù)可以出現(xiàn)在定義處,可以在聲明處。
在實(shí)驗(yàn)中發(fā)現(xiàn)一個(gè)有意思的現(xiàn)象,可以交叉定義,但是不推薦這么用:

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

c不支持
