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