模板函數編譯原理
一— 導讀
首先我們需要搞清楚這樣一個實際生活中的例子,當工廠裡面要生產一把刀,需要將滾燙的鐵水倒入到模具裡面,然後再經過錘鍊就得到一把鋒利的刀。函數模板和模板函數正是這樣的一組關係,函數模板相當於做刀的模具,而模板函數就是我們得到的刀。
二—在linux中進行實際操作
首先我們先寫一個hello.cpp文件,裡面放一個函數模板和三組調用
輸入如下命令進行編譯
編譯完成我們再看一下hello.s文件
雖然有3個MyAdd函數,但細心的同學就會發現,第一個和第三個是同名的,都是IiET-的形式,這是因為第一此調用和第三次調用參數的類型是相同的,都為int類型,編譯器在編譯第一個調用的時候就已經生成了int類型的模板函數。
三—模板函數誕生編譯器編譯次數
編譯器一開始會在模板聲明的地方先編譯函數模板,根據寫編譯器的程式設計師們指定的規則,生成相應的函數模板程式碼。之後若編譯器發現有 調用,又會在調用的地方編譯一次,生成相應類型的調用程式碼。故而一次調用編譯器需要編譯兩次。
四—注意事項
編譯器並不是把函數模板直接拿來用,函數模板是不能直接使用的,編譯器調用的是以函數模板為型生成的模板函數。這裡只要看了導讀所說的內容就應該很容易理解。