c++之帶默認形參值的函數


先來個例子:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int sub(int x=8,int y=3){
 6     return x+y;
 7 }
 8 
 9 int main(){
10     //freopen("D:\\input.in","r",stdin);
11     //freopen("D:\\output.out","w",stdout);
12     cout<<sub(20,15)<<endl;//35
13     cout<<sub(10)<<endl;//13
14     cout<<sub()<<endl;//11
15     return 0;
16 }

需要注意的地方:

1.若函數具有多個形參,則默認形參值必須自右向左連續地定義,並且在一個默認形參值的右邊不能有未指定默認值的參數。這是由於c++語言在函數調用時參數是自右向左入棧這一約定決定的。

eg:int f(int a, float b=5.0, char c='c');

2.在調用一個函數時,如果省去了某個實參,則直到最右端的所有實參都得省去(當然,與其對應的形參要有默認值)。

eg:int f(int a, float b=5.0, char c='c', int d=10);         f(9,4.5) <=> f(9,4.5,'c',10).

3.默認形參值的說明必須出現在函數調用之前。而且,如果存在函數原型,則形參的默認值應在函數原型中指定;否則在函數定義中指定。另外,若函數原型中已給出了形參的默認值,則在函數定義中不得重復指定,即使所指定的默認值完全相同也不行

eg:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int sub(int x=8,int y=3);
 6 
 7 int main(){
 8     //freopen("D:\\input.in","r",stdin);
 9     //freopen("D:\\output.out","w",stdout);
10     cout<<sub(20,15)<<endl;//35
11     cout<<sub(10)<<endl;//13
12     cout<<sub()<<endl;//11
13     return 0;
14 }
15 int sub(int x,int y){
16     return x+y;
17 }

4.在同一個作用域,一旦定義了默認形參值,就不能再定義它。

5.如果幾個函數說明出現在不同的作用域內,則允許分別為它們提供不同的默認形參值。

eg:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int sub(int x=8,int y=3);
 6 
 7 int main(){
 8     //freopen("D:\\input.in","r",stdin);
 9     //freopen("D:\\output.out","w",stdout);
10     int sub(int x=0,int y=0);
11     cout<<sub()<<endl;
12     return 0;
13 }

6.對形參默認值的指定可以是初始化表達式,甚至可以包含函數調用。

eg:int f(int a, float b=5.0, char c='c', int d=sub(20,15));

7. 在函數原型給出了形參的默認值時,形參名可以省略。

eg:int f(int, float=5.0, char='c', int=sub(20,15));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM