C++超詳細(xì)講解函數(shù)參數(shù)的默認(rèn)值
1.參數(shù)默認(rèn)值的指定方式
在 C++ 中,可以在函數(shù)聲明時(shí)為參數(shù)提供一個(gè)默認(rèn)值。這樣在函數(shù)調(diào)用時(shí),如果沒有提供函數(shù)參數(shù)值,則使用默認(rèn)值。
e.g. 在函數(shù)聲明時(shí),指定參數(shù)默認(rèn)值
void Demo(int x = 0); int main(int argc, char* argv[]) { Demo(); // 不用提供參數(shù),會將 x = 0 的結(jié)果輸出 return 0; } void Demo(int x) { printf("x = %d\r\n", x); }
e.g. 沒有函數(shù)聲明,直接在函數(shù)定義時(shí)指定參數(shù)默認(rèn)值
void Demo(int x = 5) { printf("x = %d\r\n", x); } int main(int argc, char* argv[]) { Demo(); return 0; }
注意:參數(shù)的默認(rèn)值必須在函數(shù)聲明中指定
error e.g. 在函數(shù)的聲明和定義中均指定默認(rèn)值
void Demo(int x = 0); int main(int argc, char* argv[]) { Demo(); return 0; } void Demo(int x = 10) { printf("x = %d\r\n", x); }
error e.g. 僅僅在函數(shù)的定義中指定默認(rèn)值
void Demo(int x); int main(int argc, char* argv[]) { Demo(); return 0; } void Demo(int x = 10) { printf("x = %d\r\n", x); }
2.參數(shù)默認(rèn)值的指定規(guī)則
參數(shù)的默認(rèn)值必須 從右向左 提供,即 未指定默認(rèn)值的參數(shù)不能出現(xiàn)在指定默認(rèn)值參數(shù)的右邊,正確錯(cuò)誤示例如下所示:
// ok void Demo(int x, int y = 1; int z = 2); // error void Demo(int x = 0, int y, int z = 2);
為什么指定這個(gè)規(guī)則呢?
在 C++ 中調(diào)用函數(shù)時(shí),對于沒有指定默認(rèn)值的參數(shù),是可以不用對其傳入?yún)?shù)的,而且不會報(bào)錯(cuò)。
有一個(gè)如下代碼所示的函數(shù):
void Demo(int x, int y = 1, int z = 2) { printf("x = %d\r\n", x); printf("y = %d\r\n", y); printf("z = %d\r\n", z); }
當(dāng)調(diào)用這個(gè)函數(shù)時(shí),可以執(zhí)行下面的代碼進(jìn)行調(diào)用:
int main(int argc, char* argv[]) { Demo(0); return 0; }
上面所述的調(diào)用方式是沒有錯(cuò)的,此時(shí)將 0 賦值給 x,參數(shù) y、z 分別使用默認(rèn)值。但是,如果函數(shù)是如下代碼所示的:
void Demo(int x = 0, int y, int z = 2) { printf("x = %d\r\n", x); printf("y = %d\r\n", y); printf("z = %d\r\n", z); }
當(dāng)我們用上述同樣的方式進(jìn)行調(diào)用時(shí):
int main(int argc, char* argv[]) { Demo(0); return 0; }
此時(shí),代碼是編譯不過的,因?yàn)榫幾g器默認(rèn)把 0 賦值給 x,導(dǎo)致沒有給參數(shù) y 傳入值而報(bào)錯(cuò)。到這里,應(yīng)該就曉得制定這個(gè)規(guī)則的好處了,這樣在調(diào)用函數(shù)的時(shí)候,只需要從左向右傳入?yún)?shù)。如果未指定的默認(rèn)值的參數(shù)出現(xiàn)在指定默認(rèn)值參數(shù)的右邊,那么就必須對指定默認(rèn)值的參數(shù)傳入?yún)?shù)。如下代碼所示的調(diào)用方式均正確:
int main(int argc, char* argv[]) { Demo(0); Demo(0, 3); Demo(0, 3, 4); return 0; }
到此這篇關(guān)于C++超詳細(xì)講解函數(shù)參數(shù)的默認(rèn)值的文章就介紹到這了,更多相關(guān)C++函數(shù)參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言的隨機(jī)數(shù)rand()函數(shù)詳解
這篇文章主要為大家詳細(xì)介紹了C語言的隨機(jī)數(shù)rand()函數(shù),使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02VisualStudio2022提交git代碼的方法實(shí)現(xiàn)
本文主要介紹了VisualStudio2022提交git代碼的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07C語言實(shí)現(xiàn)職工工資管理系統(tǒng)的示例代碼
這篇文章主要為大家詳細(xì)介紹了C語言如何實(shí)現(xiàn)職工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08