面試官問我這個問題,並不確定我的答案是否足夠好。任何人有任何想法?爲什麼鏈接器在C++中比C更強大?
2
A
回答
0
我腦海中浮現的第一個想法是名稱改變。在C++中但不在C中,可以有兩個名稱相同但參數不同的方法。編譯器必須區分這兩種方法,從而在內部更改(損壞)名稱。
C++編譯器必須在C中執行該操作的另一件事是處理類繼承。你有抽象類,重寫方法和虛擬方法。這需要更多的處理來整理。
0
我不能說我理解得很好,但這blog entry by Ian Lance Taylor似乎有一個答案。從那裏引用:
使用C++有一些特殊的挑戰。爲類添加新的虛擬方法可以是任何使用該類的函數的ABI更改。在這種情況下提供類的向後兼容版本非常尷尬 - 沒有自然的方式來指定用於虛擬表的名稱和版本或舊版本的RTTI信息。
當然,您絕不能刪除任何符號。
閱讀條目以獲得更多的上下文。 (ABI =應用程序二進制接口)
相關問題
- 1. C++鏈接器錯誤...爲什麼?
- 2. C++鏈接增強庫
- 3. 爲什麼Java中的字符串比較(CompareTo)比C#更快?
- 4. 爲什麼CompareAndSwap比TestAndSet更強大的指令?
- 5. C#套接字:爲什麼socket.LocalEndPoint更改?
- 6. 爲什麼在C++中使用「vector.at(x)」比「vector [x]」更好?
- 7. 什麼是在C#中的C++隱式鏈接DLL等價物?
- 8. 爲什麼複製{ctrl down} c {ctrl up}比^ c更安全?
- 9. 爲什麼const暗示C++中的內部鏈接,當它不在C中?
- 10. 爲什麼我的C++ ATL項目鏈接在CIL中?
- 11. 爲什麼在C++靜態DLL鏈接中使用LIB?
- 12. C++爲什麼鏈接器無法看到我的文件?
- 13. 爲什麼C++靜態庫項目沒有鏈接器設置?
- 14. C++:爲什麼我得到鏈接器錯誤?
- 15. 爲什麼我無法將我的C/C++庫與NetBeans鏈接?
- 16. 爲什麼C++在這段代碼中比C快得多?
- 17. 爲什麼C++ fwrite()在release中產生更大的輸出?
- 18. 爲什麼在c#中user.identity.name區分大小寫更改?
- 19. 爲什麼鏈接比裏面的跨度大?
- 20. 如何更換在C#中使用SendGrid阿比按鈕鏈接
- 21. 爲什麼我在C++中使用Boost Filesystem獲得鏈接器錯誤?
- 22. C++比奇怪更大
- 23. 爲什麼div比父div更大?
- 24. 爲什麼OCaml中的遞歸比C++或Java更高效?
- 25. 爲什麼C++需要爲malloc()強制轉換,但C不是?
- 26. c/C++爲什麼有時會強調爲什麼有時沒有下劃線?
- 27. 什麼是光標鏈接列表? [C++]
- 28. c庫鏈接到什麼點
- 29. 爲什麼在C中使用%c?
- 30. 鏈接MySQL C連接器?
你是如何回答這個問題的? –
你的回答是什麼? –