C++ 函式多載
什么是函式多載:
- 可以有多個同名的函式,
- 可以通過函式多載來設計一系列函式——他們完成相同的作業,但使用不同的引數串列,
函式特征標:
- 函式多載的關鍵是函式的引數串列——也稱為函式特征標,
- 如果兩個函式的引數數目和型別相同,同時引數的排列順序也相同,則它們的特征標相同,反之不同,
- C++ 允許定義名稱相同的函式,條件是它們的特征標不同,
注意事項:
- 編譯器根據所采取的用法使用有相應特征標的原型,
- 沒有匹配的原型時,C++ 將嘗試使用標準型別轉換強制進行匹配,
- 沒有匹配的原型又有多個可轉換的方式時 C++ 將拒絕這種函式呼叫,并將其視為錯誤,
- 一些看起來彼此不同的特征標是彼此不能共存的:
- 如:變數與參考
double cube(double x); double cube(double & x);
編譯器在檢查函式特征時,把型別參考和型別本身視為同一個特征標,
- 非 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 型別的左右值實參),
- 如果多載使用這三種函式,將呼叫最匹配的版本,
何時使用函式多載:
- 當函式執行基本上相同的任務,但使用不同形式的資料時,
- 有時使用帶默認引數的函式比撰寫多個多載函式要簡單些,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/36249.html
標籤:C++
