l 【規(guī)則 8-3-1】參數(shù)缺省值只能出現(xiàn)在函數(shù)的聲明中,而不能出現(xiàn)在定義體中。 例如: void Foo(int x=0, int y=0); // 正確,缺省值出現(xiàn)在函數(shù)的聲明中 void Foo(int x=0, int y=0) // 錯誤,缺省值出現(xiàn)在函數(shù)的定義體中 { } 為什么會這樣?我想是有兩個原因:一是函數(shù)的實現(xiàn)(定義)本來就與參數(shù)是否有 缺省值無關(guān),所以沒有必要讓缺省值出現(xiàn)在函數(shù)的定義體中。二是參數(shù)的缺省值可能會 改動,顯然修改函數(shù)的聲明比修改函數(shù)的定義要方便。 l 【規(guī)則 8-3-2】如果函數(shù)有多個參數(shù),參數(shù)只能從后向前挨個兒缺省,否則將導致 函數(shù)調(diào)用語句怪模怪樣。 正確的示例如下: void Foo(int x, int y=0, int z=0); 高質(zhì)量C++/C 編程指南,v 1.0 2001 Page 64 of 101 錯誤的示例如下: void Foo(int x=0, int y, int z=0); 要注意,使用參數(shù)的缺省值并沒有賦予函數(shù)新的功能,僅僅是使書寫變得簡潔一些。 它可能會提高函數(shù)的易用性,但是也可能會降低函數(shù)的可理解性。所以我們只能適當?shù)?/div> 使用參數(shù)的缺省值,要防止使用不當產(chǎn)生負面效果。 示例8-3-2 中,不合理地使用參數(shù) 的缺省值將導致重載函數(shù)output 產(chǎn)生二義性。 #include <iostream.h> void output( int x); void output( int x, float y=0.0); void output( int x) { cout << " output int " << x << endl ; } void output( int x, float y) { cout << " output int " << x << " and float " << y << endl ; } void main(void) { int x=1; float y=0.5; // output(x); // error! ambiguous call output(x,y); // output int 1 and float 0.5 } 示例8-3-2 參數(shù)的缺省值將導致重載函數(shù)產(chǎn)生二義性 |
|