模板函數編譯原理

一— 導讀

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

 

二—在linux中進行實際操作

首先我們先寫一個hello.cpp文件,裡面放一個函數模板和三組調用

輸入如下命令進行編譯

編譯完成我們再看一下hello.s文件

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

 

三—模板函數誕生編譯器編譯次數

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

 

四—注意事項

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

 

Tags: