天天看點

C++編譯器函數模版機制剖析 - 函數模版的本質

思考:為什麼函數模闆能夠和函數重載放在一塊。C++編譯器是怎樣提供函數模闆機制的?

demo 1

把demo 1編譯成彙編檔案,檢視:

觀察發現一個現象,myswap函數模版有一個聲明,兩個定義,這樣的情況和我在“為什麼會有函數模版中”博文中提到的兩個myswap函數非常相似,實際這裡展現了C++實作函數模版的本。本來須要程式猿依據須要去寫非常多個邏輯同樣,參數不同的函數。可是C++編譯器幫我們做了這件事,依據調用會自己主動生成這些函數。這也是為什麼函數模版能夠和普通函數放在一起。

總結:函數模版機制結論:

編譯器并非把函數模版處理成可以處理随意類的函數;

編譯器從函數模版通過詳細類型産生不同的函數;

編譯器會對函數模版進行兩次編譯:在聲明的地方對模版代碼本身進行編譯,在調用的地方對參數替換後的代碼進行編譯。

本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/5336758.html,如需轉載請自行聯系原作者

繼續閱讀