(七)羽夏看C語言——模板(C++)


寫在前面

  此系列是本人一個字一個字碼出來的,包括示例和實驗截圖。本人非計算機專業,可能對本教程涉及的事物沒有了解的足夠深入,如有錯誤,歡迎批評指正。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閑錢,可以打賞支持我的創作。如想轉載,請把我的轉載信息附在文章后面,並聲明我的個人信息和本人博客地址即可,但必須事先通知我

你如果是從中間插過來看的,請仔細閱讀 (一)羽夏看C語言——簡述 ,方便學習本教程。

模板

模板函數

  為了更快捷的寫重復性代碼,所謂的重復性代碼,就是里面只有很少的東西不一樣,可以說是一個套路,但大量的類似這樣的代碼會給維護帶來巨大的麻煩。為了更好的寫“重復性”代碼,C++提供了模板,來幫助我們寫重復性代碼。模板在匯編層面幫了我們做了什么,我們用下面的代碼進行實驗:

template <typename T>
bool Max(T a, T b)
{
    return a > b ? a : b;
}

int main()
{
    int i = 39;
    int j = 20;
    Max(i, j);

    double f1 = 13.5;
    double f2 = 20.7;
    Max(f1, f2);

    char s1[] = "Hello";
    char s2[] = "World";
    Max(s1, s2);
    return 0;
}

  下面是反匯編結果:

  從匯編來看,調用模板的時候,每一個類型都會生成一個“函數”,不過這個不是我們自己寫的。感興趣在每個模板函數call跟進去看看,你可以發現每一個都是新的“函數”。

模板類

  如果是模板類呢,我們用以下代碼進行實驗:

template <class T>
class MyClass
{
public:
    MyClass(T param)
    {
        test = param;
    }

private:
    T test;
};

int main()
{
    MyClass<int> clsint(2);
    MyClass<float> clsfloat(5.0);

    return 0;
}

  如下是反匯編:

  從匯編來看,和模板函數無異,感興趣的也可以跟進去看看,本人就不再繼續了。

結語

  羽夏看C語言這個系列到這就結束了。如果有什么好的建議或者文章如有什么不足或者錯誤,歡迎批評指正。如果覺得不錯,給個支持,感謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM