天天看點

21天學通C++(1-1)函數預設參數

在C++中,可以為參數指定預設值,C語言是不支援預設參數的,Java也不支援!!!

預設參數的文法與使用:

(1)在函數聲明或定義時,直接對參數指派。這就是預設參數;

(2)在函數調用時,省略部分或全部參數。這時可以用預設參數來代替。

注意事項:

(1)函數預設值隻能指派一次,或者是在聲明中,或者是在定義中,如下所示

/*正确*/  

#include <iostream> 

int f(int a=5);  

int f(int a)  

{  

        std::cout <<a<<std::endl;  

        return a;  

}  

int main()  

        f();  

        return 0;  

int f(int a=5)  

int f(int a);  

/*錯誤*/  

[niuxinli@localhost ~]$ make test  

g++     test.cpp   -o test  

test.cpp: In function ‘int f(int)’:  

test.cpp:3: error: default argument given for parameter 1 of ‘int f(int)’  

test.cpp:2: error: after previous specification in ‘int f(int)’  

make: *** [test] Error 1  

(2) 預設參數定義的順序為自右到左。即如果一個參數設定了預設值時,其右邊的參數都要有預設值。比如int f(int a, int b=1,int c=2,int d=3)是對的,但是int f(int a,int b=1,int c=2,int d)就是錯的。這個的原因很顯然,你傳幾個參數,編譯器都認為是從左向右的,比如int f(int a,int b=1,int c),傳入了f(1,2),它會認為a=1,b=2,那c呢?是以必須做這個限定。

#include <iostream>  

int f(int a,int b);  

int f(int a=5,int b)  

        f(6);  

test.cpp: In function ‘int f(int, int)’:  

test.cpp:3: error: default argument missing for parameter 2 of ‘int f(int, int)’  

(3)預設參數調用時,則遵循參數調用順序,自左到右逐個調用。這一點要與第(2)厘清楚,不要混淆。

如:void mal(int a, int b=3, int c=5); //預設參數

mal(3, 8, 9 ); //調用時有指定參數,則不使用預設參數

mal(3, 5); //調用時隻指定兩個參數,按從左到右順序調用,相當于mal(3,5,5);

mal(5); //調用時隻指定1個參數,按從左到右順序調用v當于mal(5,3,5);

mal( ); //錯誤,因為a沒有預設值

mal(3, , 9) //錯誤,應按從左到右順序逐個調用

(4)預設參數可以是全局變量,全局常量,還可以是函數,但是不能是局部變量,因為局部變量在編譯時未定

[niuxinli@localhost ~]$ cat test.cpp  

int x = 5;  

int f(int a,int b,int c);  

int f(int a,int b=5,int c=x)  

        std::cout <<a+b+c<<std::endl;  

int f2(int (*func)(int,int,int)=f )  

    func(2,3,5);  

    return 0;  

        f(1);  

        f2();  

[niuxinli@localhost ~]$ make test && ./test  

11  

10  

但是注意一點,func不能使用預設參數了,因為func是局部變量,它是後來被指派成f的

    func(2);  

test.cpp: In function ‘int f2(int (*)(int, int, int))’:  

test.cpp:11: error: too few arguments to function  

本文轉自nxlhero 51CTO部落格,原文連結:http://blog.51cto.com/nxlhero/702238,如需轉載請自行聯系原作者

上一篇: 使用技巧
下一篇: vim 使用技巧