C++ 函數重載

C++ 函數重載

什麼是函數重載:

  • 能夠有多個同名的函數。
  • 能夠經過函數重載來設計一系列函數——他們完成相同的工做,但使用不一樣的參數列表。

函數特徵標:

  • 函數重載的關鍵是函數的參數列表——也稱爲函數特徵標。
  • 若是兩個函數的參數數目和類型相同,同時參數的排列順序也相同,則它們的特徵標相同,反之不一樣。
  • C++ 容許定義名稱相同的函數,條件是它們的特徵標不一樣。

注意事項:

  • 編譯器根據所採起的用法使用有相應特徵標的原型。
  • 沒有匹配的原型時,C++ 將嘗試使用標準類型轉換強制進行匹配。
  • 沒有匹配的原型又有多個可轉換的方式時 C++ 將拒絕這種函數調用,並將其視爲錯誤。
  • 一些看起來彼此不一樣的特徵標是彼此不能共存的:
    • 如:變量與引用

double cube(double x); double cube(double & x);函數

編譯器在檢查函數特徵時,把類型引用和類型自己視爲同一個特徵標。spa

  • 非 const 與 const 同時存在時匹配最佳,只有 const 存在時匹配函數時並不區分 const 和非 const 變量:
    • 將非 const 值賦給 const 變量是合法的,但反之是非法的。
  • 是特徵標,而不是函數類型使得能夠對函數進行重載。

重載引用參數:

1 void sink(double & r1);   // matches modifiable lvalue 
2 void sink(const double & r2);     // matches modifiable or const lvalue, rvalue
3 void sink(double && r3);  // matches rvalue
  • 左值引用參數 r1 與可修改的左值參數(要求類型徹底匹配)匹配。
  • const 左值引用參數 r2 與可修改的左值參數、const 左值參數和右值參數匹配(考慮類型不匹配時匿名變量的生成)。
  • 右值引用參數 r3 與右值匹配(彷佛具備相似生成匿名變量的功能:double && 類型可接受 int 或 const int 類型的左右值實參)。
  • 若是重載使用這三種函數,將調用最匹配的版本。

什麼時候使用函數重載:

  1. 當函數執行基本上相同的任務,但使用不一樣形式的數據時。
  2. 有時使用帶默認參數的函數比編寫多個重載函數要簡單些。
相關文章
相關標籤/搜索