[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,產生二義性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章