我的問題與C++類定義有關。我明白,如果班級中存在許多成員變量。班級的規模將會增加。但是,增加類成員函數的數量不會影響其大小。但是,我想知道具有更多成員函數的類和具有更少成員函數的類之間的主要區別是什麼。調用具有較少成員函數的類會更快嗎?類成員函數編號的影響
4
A
回答
2
不,唯一能夠在所有這方面產生任何影響的功能都是虛擬功能,而且無論您擁有多少功能,它們的速度都比平時慢很多。在所有其他情況下,編譯器確切地知道在調用特定函數時要運行哪些代碼,因此不必進行任何搜索,並且方法的數量無關緊要。
1
不,成員函數的數量對調用函數的速度沒有影響(至少在任何理智的實現中)。任何對函數的調用都將被編譯成設置函數參數的代碼,然後使用調用指令。編譯器在編譯時解析該函數的地址,並在呼叫指令中使用該函數,或者在虛擬函數中使用虛函數在表中查找要調用的地址。
4
您需要每個實例的空間來存儲成員變量,但成員函數不是實例的一部分,至少不是直接的。通常每個額外的虛擬成員函數都需要一個額外的指針,但該指針指向vtable,該指針在類的所有實例中共享,因此不會添加到每個成員的大小。
非虛擬成員函數只佔用代碼內存中的空間:它們的空間需求與獨立函數沒有區別,唯一的區別是將指針傳遞給this
的隱藏參數。
添加到類中的第一個虛函數會爲存儲實例所需的空間添加一個額外的指針;額外的非虛擬成員函數根本不參與空間需求。
1
功能較少的類不會比具有較多功能的類更有效。
功能效率受算法和I/O的影響最爲顯着。
但是編譯時間會受到影響。
相關問題
- 1. 在非成員函數聲明的開頭有什麼影響?
- 2. 如何用數據成員和成員函數編寫類C++
- 3. 類,成員函數和單獨編譯
- 4. 基類成員函數直接訪問子類成員函數?
- 5. C++類的成員函數
- 6. 的std ::類成員函數
- 7. C++分配成員的目標函數,類成員函數
- 8. 從不同的類成員函數調用成員函數
- 9. 函數中的類成員函數?
- 10. C++類的成員函數:如何編寫這些函數?
- 11. 從成員struct的成員函數中訪問類的成員?
- 12. 匿名內部類不會影響外部類成員
- 13. 如影隨形一個成員函數的函數參數
- 14. 在非類成員函數的參數中傳遞類成員函數
- 15. 類成員函數指針
- 16. 地圖,類,成員函數
- 17. 類/成員函數錯誤
- 18. 虛擬對類模板成員使用的影響
- 19. 在Java中向抽象基類添加成員的影響
- 20. 作爲類成員的類成員函數指針
- 21. 類的成員函數改變類成員常量
- 22. 使用另一個類成員的類成員函數指針
- 23. 同步會影響對象成員嗎?
- 24. 訪問受參數影響的數據成員
- 25. 函數編譯正確,但它不作爲類的成員函數編譯
- 26. 函子到靜態成員函數和靜態成員函數的類型
- 27. 分配參數函數類的成員
- 28. 成員函數的const修飾符如何影響重載解析?
- 29. 類成員函數沒有成功
- 30. 使用類的成員函數的for_each
只是出於好奇...你怎麼提出這個問題? – Qnan 2012-08-03 15:22:07
*編譯*需要更長的時間,但之後不會有任何區別。編譯器會指出如何直接調用每個函數。 – 2012-08-03 15:27:05