首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 缺省參數詳解:默認值、重載區別與最佳實踐

     編輯:關於C++

什麼是缺省參數

函數聲明時為參數指定默認值,調用時可省略該參數。語法:void func(int a=0, int b=1);

普通函數示例

void func(int m=0, int n=1) {
    cout << "m=" << m << " n=" << n << endl;
}
int main() {
    func();      // m=0 n=1
    func(3);     // m=3 n=1
    func(3,5);   // m=3 n=5
}

成員函數示例

class A {
    int w, h;
public:
    void set(int w=20, int h=3); // 聲明處指定默認值
    void count(bool flag=false);
};

void A::set(int width, int height) { w=width; h=height; }
void A::count(bool val) {
    cout << (val ? "面積:" : "半面積:") << (val ? w*h : w*h/2) << endl;
}

int main() {
    A a;
    a.set();      // 使用默認 20,3
    a.count();    // 半面積: 30
    a.set(5,2);   // 覆蓋
    a.count(true); // 面積: 10
}

缺省參數 vs 函數重載

特性缺省參數函數重載
本質單一函數,調用時補全參數多個同名函數,編譯時區分
參數變化只能從右向左連續省略類型、個數、順序任意組合
代碼體積僅一份函數體每個版本獨立函數體
可讀性調用處隱含默認值,易被忽略顯式區分,意圖清晰

最佳實踐建議

  1. 簡單的「可選參數」優先用缺省值(如日誌級別、緩衝區大小)
  2. 語義差異大的操作用重載(如 open(file) vs open(host,port))
  3. 避免缺省參數與重載混用導致歧義
  4. 默認值僅在聲明處指定,定義處不再重複

常見陷阱

// 錯誤:虛函數缺省參數按靜態類型綁定
class Base { virtual void f(int x=10); };
class Derived : public Base { void f(int x=20) override; };
Base* p = new Derived();
p->f(); // 調用 Base::f,x=10 而非 20!

缺省參數是編譯時語法糖,善用可減少樣板代碼,但需警惕虛函數默認值的靜態綁定特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved