假設我聲明瞭一個模板,但從未在C++中引用它。編譯器在可執行文件中對它做了什麼?它是否佔用任何進程內存?如果C++模板從未被引用,是否使用內存?
9
A
回答
13
不,不會爲永遠不會實例化的函數模板生成代碼。另外,不會爲永遠不會調用的類模板的非模板成員函數生成代碼。
特別是,可執行文件的大小不會更大,也不會發生任何運行時間開銷。
+0
(除非您明確實例化類模板) – aschepler
4
不,它不。
模板類和函數不是實際的類或函數:它們只是編譯器指示如何生成某些類和類的函數。當您引用模板時,編譯器會使用該模板來計算如何生成源代碼,並編譯生成的代碼,每次對模板的不同參數化進行一次編譯。
使用模板的唯一開銷是編譯時間稍微多一點,對於20世紀80年代以後任何時候建立的任何計算機都沒有什麼大不了的。
+0
好的,謝謝,這是有道理的 – Iowa15
相關問題
- 1. 如果removeAllListeners()未被調用,EventEmitter是否會導致內存泄漏?
- 2. C++ type_traits模板添加引用,如果不是const
- 3. 分配的內存是否使模塊被內核認爲是「已使用」
- 4. 如何使Django模板引擎在內存模板中呈現?
- 5. 如果未調用clearTimeout(),flash.utils.setTimeout()是否會泄漏內存?
- 6. C++對使用模板的類的未定義引用
- 7. 引用是否可以佔用內存?
- 8. 如何使用Django模板存儲模板標籤的結果?
- 9. 引用是否在C++中佔用內存?
- 10. C++模板類自引用
- 11. 如果函數從未使用過,可以在C++模板函數中使用未定義的類型嗎?
- 12. C#使用索引器與模板
- 13. 使用lodash模板,我如何檢查變量是否存在?
- 14. 如果參數未被修改,R編譯器是否通過引用傳遞?
- 15. 如果未實例化成員模板,是否要評估static_asserts?
- 16. XSLT使用應用模板,以檢查是否存在節點
- 17. c#訪問器未被引用調用
- 18. 是否可以防止沒有專門化的C++模板被使用?
- 19. 如果我從未實際使用引用,那麼是否可以引用超出範圍的數組元素?
- 20. MVC編輯模板,結果被緩存
- 21. C++使用內部枚舉類模板
- 22. 索引未被使用
- 23. C++引用是否需要任何內存?
- 24. 如果從未使用其功能,是否需要appcompat?
- 25. Oracle存儲過程 - 是否raise_application_error禁用該過程,如果未被捕獲?
- 26. C++:使用模板
- 27. C++使用模板
- 28. 使用C++模板
- 29. C++不能調用方法(使用模板)從模板方法
- 30. C#是否爲未使用的模板參數生成具體實現?
否(15個字符) – user7116