1、函式模板(template)
當需要定義多個具有相同函式名的函式時,需要進行函式過載(overload)。函式過載的條件是這些函式的形參列表各不相同。事實上,所有函式都有簽名,函式的簽名由函式名稱和形參列表確定,程式中每個函式都必須有唯一的簽名。同理,不同的返回值型別不足以區別函式。
當多個函式過載時,僅僅因為變數和形參型別不同,而演算法和流程一致,為避免對每個函式重複編寫本質上相同的**,可以採用函式模板。如下:
template
t max(t x, int len)
呼叫時如下:
int ivalus = ;
double dvalues = ;
int imax = max(ivalues, 4);
double dmax = max(dvalues, 4);
編譯器會自動識別並生成相應**。
2、泛型函式(generic)
泛型函式的作用與函式模板相似,但工作原理上有很大不同:使用函式模板時,編譯器根據模板生成需要的函式的源**,然後與其他**一起編譯,在某些情況下,將導致許多函式的產生,從而使執行模組的體積增大。而泛型函式本身將被編譯器編譯,當呼叫某個與泛型函式說明匹配的函式時,實際型別將在執行時替代型別形參,這樣一來沒有額外**在編譯時生成。泛型函式的定義與函式模板類似,如下:
genericwhere t:icomparable
t max(array^ x)
關鍵字where後面內容,是對在使用泛型函式時,用於替代t的實際型別的約束條件,在此處表示該型別必需實現icomparable介面。
3、內聯函式(inline)
當函式定義為內聯函式時,編輯器將設法以函式體**替代函式呼叫,所以內聯函式最適合用於非常短小的、頻繁呼叫的簡單函式,如迴圈體內的簡單函式呼叫等。通過內聯函式可以避免呼叫函式時的系統開銷,從而加速**執行。如:
inline double multiplication(double da, double db) ;
double dm = 0;
int i;
for (i=0;i<10000;i++)
c 學習之特殊形式的函式
知識點 1.程式 資料 演算法 2.結構化程式設計方法的基本思想 模組化設計 重用函式 分類管理資料 結構化程式設計所棉鈴的問題 開發大型軟體系統 對大型軟體的維護 公升級 解決方法 資料類 資料類 資料 演算法 3.物件導向的初始化形式 int x 10 y c 語言風格4.c 語言常變數 con...
mysql 特殊函式 mysql 的特殊函式
1.format 函式 函式用於對字段的顯示進行格式化 語法 select format column name,format from table name column name 必需。要格式化的字段 format 必需。規定格式。2.ucase 函式 ucase 函式把字段的值轉換為大寫。語法...
變數定義及用法的特殊形式實戰
例1 經過反引號的 date 命令測試 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 root xcn echo date date 單引號時看到啥顯示啥 root xcn echo date fri jun 16 14 45 29 cst 2...