聲明是用戶可以看到的部分,客戶非常信任地使用這個特性,希望得到一定的結果,但是你在實現里使用了不同的缺省值,那么將是災難性的。因此編譯器禁止聲明和定義時同時定義缺省參數值。
類的成員函數的參數表在聲明時默認參數位于參數表右部,如int fn(int a,int b=0,int c=5)之類的,但在它定義的時候則不能加默認參數,只能寫int fn(int a,int b,int c);
若聲明時沒有定義缺省參數值,那么在定義成員函數時可以定義缺省參數值。但這種情況通常用戶是看不見的,因此應避免。
對于非類中的函數,在函數聲明中定義默認參數的另外一個好處時,可以利用聲明來更改默認參數的值。
實踐證明,缺省參數可以在定義中,也可以在聲明中,只要全局的聲明和定義中只有一個帶參數即可
局部的聲明中可以隨便改變默認參數(不管上述默認參數是在定義中還是在聲明中)。在下一次改變之前,此參數將一直生效,并將覆蓋全局的申明。若要使用全局的聲明默認參數,可以加“::”
例如:
//int fglobal(int a,int b=2,int c=5)//redefinition of default parameter : parameter 3int fglobal(int a,int b,int c){cout<<a << b <<c<< endl;return a;}int fglobal(int a,int b=2,int c=5); // 全局的申明int CAbc::m_abc=1000;int main(int argc, char* argv[]){CAbc a;a.fn();//fglobal(); //此時用的全局申明,無第一個參數不行fglobal(1);int fglobal(int a=2,int b=3,int c=5); // 局部的申明,不管上述默認參數是在定義還是申明中fglobal();::fglobal(3); // 此時將采用全局申明return 0;}//205//125//235//325}