[c/c++]函數參數缺省值
參數缺省值只能出現在函數的聲明中,而不能出現在定義體中。
例如:
void Foo(int x=0, int y=0); // 正確,缺省值出現在函數的聲明中
void Foo(int x=0, int y=0) // 錯誤,缺省值出現在函數的定義體中
{
…
}
爲什麼會這樣?我想是有兩個原因:一是函數的實現(定義)本來就與參數是否有缺省值無關,所以沒有必要讓缺省值出現在函數的定義體中。二是參數的缺省值可能會改動,顯然修改函數的聲明比修改函數的定義要方便。
如果函數有多個參數,參數只能從後向前挨個兒缺省,否則將導致函數調用語句怪模怪樣。
正確的示例如下:
void Foo(int x, int y=0, int z=0);
錯誤的示例如下:
void Foo(int x=0, int y, int z=0);
可能產生的二義性:
void output( int x);
void output( int x, float y=0.0);
//output(3);//error,產生二義性
例如:
void Foo(int x=0, int y=0); // 正確,缺省值出現在函數的聲明中
void Foo(int x=0, int y=0) // 錯誤,缺省值出現在函數的定義體中
{
…
}
爲什麼會這樣?我想是有兩個原因:一是函數的實現(定義)本來就與參數是否有缺省值無關,所以沒有必要讓缺省值出現在函數的定義體中。二是參數的缺省值可能會改動,顯然修改函數的聲明比修改函數的定義要方便。
如果函數有多個參數,參數只能從後向前挨個兒缺省,否則將導致函數調用語句怪模怪樣。
正確的示例如下:
void Foo(int x, int y=0, int z=0);
錯誤的示例如下:
void Foo(int x=0, int y, int z=0);
可能產生的二義性:
void output( int x);
void output( int x, float y=0.0);
//output(3);//error,產生二義性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.