十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
在 C++ 中可以在函數(shù)聲明時為參數(shù)提供一個默認(rèn)值,當(dāng)函數(shù)調(diào)用時沒有提供參數(shù)的值時,則使用默認(rèn)值。函數(shù)的默認(rèn)值必須在函數(shù)聲明中指定,那么在函數(shù)定義中是否可以出現(xiàn)參數(shù)的默認(rèn)值呢當(dāng)函數(shù)聲明和定義中的參數(shù)默認(rèn)值不同時會發(fā)生什么呢?我們通過實(shí)例代碼進(jìn)行分析
創(chuàng)新互聯(lián)公司10多年成都定制網(wǎng)站服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及高端網(wǎng)站定制服務(wù),成都定制網(wǎng)站及推廣,對混凝土攪拌機(jī)等多個方面擁有多年的網(wǎng)站營銷經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
#includeint mul(int x = 0); int main(int argc, char *argv[]) { printf("mul() = %d\n", mul()); printf("mul(-1) = %d\n", mul(-1)); printf("mul(2) = %d\n", mul(2)); return 0; } int mul(int x) { return x * x; }
我們看到在聲明函數(shù) mul 時,我們將參數(shù)默認(rèn)聲明為 0,我們來看看這個程序可以編譯成功嗎?如果可以,在 main 函數(shù)中會打印出什么?
我們發(fā)現(xiàn)它沒有報錯,也就是說在 C++ 中支持在函數(shù)聲明時,支持參數(shù)默認(rèn)值。那我們試試在 C 語言比那一起中是否也支持這樣的寫法呢?
我們看到這樣的寫法在 C 語言的編譯器中是不支持的,那么我們試試在定義中給默認(rèn)值,聲明中不給呢,看 g++ 編譯器是否支持
我們看到它報錯了,所以只能在聲明時給參數(shù)默認(rèn)值。
那么函數(shù)既然支持參數(shù)默認(rèn)值,那它在多個參數(shù)設(shè)置時有沒有規(guī)則呢?有兩條規(guī)則:a> 參數(shù)的默認(rèn)值必須從右向左提供;b> 函數(shù)調(diào)用時使用了默認(rèn)值,則后續(xù)參數(shù)必須使用默認(rèn)值。
我們以代碼為例進(jìn)行分析
#includeint add(int x, int y = 1, int z = 2); int main(int argc, char *argv[]) { printf("add(1) = %d\n", add(1)); // 4 printf("add(1, 2) = %d\n", add(1, 2)); // 5 printf("add(1, 2, 3) = %d\n", add(1, 2, 3));// 6 return 0; } int add(int x, int y, int z) { return x + y + z; }
我們分析下這個代碼,默認(rèn)參數(shù) y 和 z 的值分別為 1 和 2。那么 main 函數(shù)中的返回值分別為 1 + 1 + 2 = 4; 1 + 2 + 2 = 5; 1 + 2 + 3 = 6;我們來看看結(jié)果是否如此呢?
我們看到結(jié)果確實(shí)是如我們所分析的那樣。那么我們試試只給 y 默認(rèn)值,也就是說不遵循從右向左分配,看看會編譯成功嗎?
我們看到編譯報錯了,那么如果只想給 y 默認(rèn)值該怎么做呢?只需把 y 和 z 的位置換下就行,將它放在最右邊。
下來我們來說說函數(shù)占位參數(shù),在 C++ 中可以為函數(shù)提供占位參數(shù)。占位參數(shù)只有參數(shù)類型聲明,而沒有參數(shù)名聲明;在一般情況下,在函數(shù)體內(nèi)部無法使用占位參數(shù)。
我們以代碼為例,看看函數(shù)占位參數(shù)是什么樣的
#includeint func(int x, int); int main(int argc, char *argv[]) { printf("func(1, 2) = %d\n", func(1, 2)); return 0; } int func(int x, int) { return x; }
我們試試能否編譯通過呢
我們看到編譯是通過的,那么我們是不是覺得這是多此一舉呢?明明只是個需要一個參數(shù),卻多了一個占位參數(shù)。下來我們就來講下函數(shù)占位參數(shù)的意義,占位參數(shù)與默認(rèn)參數(shù)結(jié)合起來使用,兼容 C 語言程序中可能出現(xiàn)的不規(guī)范寫法。我們還記得之前那么 void func() 和 void func(void) 等價這個問題嘛,在 C 語言中它是不等價的,因?yàn)榈谝粋€是代表可接受任意多的參數(shù),而后一個是不接受參數(shù)。而在 C++ 中它們兩個表達(dá)的意思是一樣的。
通過對函數(shù)占位參數(shù)的 學(xué)習(xí),總結(jié)如下:1、C++ 中支持參數(shù)的默認(rèn)值;2、如果函數(shù)調(diào)用時沒有提供參數(shù)值,則使用默認(rèn)值;3、參數(shù)的默認(rèn)值必須從右向左提供;4、函數(shù)調(diào)用時使用了默認(rèn)值,則后續(xù)參數(shù)必須使用默認(rèn)值;5、C++ 中支持占位參數(shù),用于兼容 C 語言中的不規(guī)范寫法。
歡迎大家一起來學(xué)習(xí) C++ 語言,可以加我QQ:243343083。