模板函式編譯原理

Love&Share發表於2021-01-03

一--- 導讀

   首先我們需要搞清楚這樣一個實際生活中的例子,當工廠裡面要生產一把刀,需要將滾燙的鐵水倒入到模具裡面,然後再經過錘鍊就得到一把鋒利的刀。函式模板和模板函式正是這樣的一組關係,函式模板相當於做刀的模具,而模板函式就是我們得到的刀。

 

二---在linux中進行實際操作

首先我們先寫一個hello.cpp檔案,裡面放一個函式模板和三組呼叫

輸入如下命令進行編譯

編譯完成我們再看一下hello.s檔案

雖然有3個MyAdd函式,但細心的同學就會發現,第一個和第三個是同名的,都是IiET-的形式,這是因為第一此呼叫和第三次呼叫引數的型別是相同的,都為int型別,編譯器在編譯第一個呼叫的時候就已經生成了int型別的模板函式。

 

三---模板函式誕生編譯器編譯次數

  編譯器一開始會在模板宣告的地方先編譯函式模板,根據寫編譯器的程式設計師們指定的規則,生成相應的函式模板程式碼。之後若編譯器發現有 呼叫,又會在呼叫的地方編譯一次,生成相應型別的呼叫程式碼。故而一次呼叫編譯器需要編譯兩次

 

四---注意事項

  編譯器並不是把函式模板直接拿來用,函式模板是不能直接使用的,編譯器呼叫的是以函式模板為型生成的模板函式。這裡只要看了導讀所說的內容就應該很容易理解。

 

相關文章