熟悉c 虛函式底層實現有什麼實際意義

時間 2021-05-11 20:37:26

1樓:餘朔鈺

除錯以及多執行緒除錯。

掛到莫名其妙的地方了,變數值不對了,this指標異常。請問不懂虛函式實現,不懂編譯器怎麼設定類物件記憶體結構的話如何解決?

2樓:余世傑

就我個人而言。。。理解實現之後,可以更直觀的明白,父類指標指向子類的時候,子類指標指向父類的時候,呼叫的是哪個函式,而不用死記硬背,容易錯。

任何事情都是吧,理解原理,修改應用都會更靈活一點。

3樓:

一般來說意義並不大,但當你的應用逐漸複雜,環境牽扯逐漸增加時,熟悉包括但不限於虛函式的底層原理會讓你不會在出錯時手足無措。

比如你打算手擼COM介面,又或者不得不去實現一些多繼承或者菱形繼承之類的陰間玩意,那麼了解這些知識就可以事半功倍。

4樓:鄒曉川

虛表是c++實現多型的一種方式。你可以想想如果不用虛表,那怎麼讓編譯器去實現多型?如果明白了這一點,那對c++語言的編譯就會有更深的理解。

5樓:

其實在各種各樣的繼承場景下,不同編譯器在不同平台的虛表實現方法有差異。

如果說「熟悉底層實現」包括熟悉這些細節差異,去閱讀、學習、比較itanium abi,vc abi,我認為沒什麼太大必要。

如果只是了解虛表的基本原理,能稱得上「熟悉」嗎?

總之,我覺得沒太大必要對這個「熟悉」,除非你真正遇到了具體場景帶來的困擾,那時候再查資料也不遲。

6樓:

其實問這個的出發點是:

dynamic binding這麼不自然的東西,你是否有那麼一丟丟地好奇它是怎麼實現的呢?

往大里說,保持好奇心是乙個好的程式設計師的核心素質。

聞道有先後,技術掌握多少,磨過多少專案都只是量的問題——而對新事物的好奇與渴望,或者說對未知領域的求知慾,才是質的問題。

7樓:

當然是為了防止踩坑啦。各種語言都有其限制,了解限制能讓你更好地帶著鐐銬跳舞。

誰不想在設計時放飛自我呢。如果能用python我幹嘛非得用C++。

具體來說,為什麼帶虛函式後卻不能memset,為什麼非得加virtual特別是析構函式。這些東西並不優雅,但卻是沒有辦法的事。

8樓:

實際意義就是不要瞎用虛函式,虛函式的出現是為了增加C++ OOP抽象性而設計出來的,雖然用起來很方便,但坑也很多,不能亂用,而且使用虛函式是有時間和空間overhead的,如果確定不會用到多型特性,那能不用虛函式就別用虛函式。

C 虛函式的實現機制 虛表如何生成的

派生類構造的時候,基類部分先把自己的虛表建立好,然後派生類把自己重寫的虛函式在基類部分的表裡覆蓋了,然後如果派生類有新的虛函式,也放進這張表。單繼承情況 邱昊宇 補充下 C 標準對於虛函式的實現方式沒有任何要求,所以 C 虛函式的實現機制 無從說起。通過在物件模型中引入虛表來實現多型,只是各大編譯器...

C 虛函式

通過公司實習你想得到的是工作經驗還是其他的,比如說留在澳洲移民的機會。說實話真要靠攢一年工作經驗然後精算畢業移民,我感覺困難還是有的,當然也不是不可以,那請找專業獵頭。如果目標是這個,我傾向於去學會計 反正不需要補多少課 如果你想要工作經驗,那我建議,請去學python,sas,r 產險 或者pro...

請教c 中有關虛函式的問題?

此賬號不再使用 建議題主進行反彙編看看每個類有虛函式的類有乙個虛表虛表儲存了虛函式的位址題主如果呼叫需要訪問物件的成員變數的虛函式當然會出錯因為編譯器在呼叫這些訪問成員變數的函式時會將物件的位址裝入 rsi之類的暫存器通過這個位址訪問成員變數再插一句題主用的是32位編譯環境吧建議把int 轉換換成 ...