[英]Access specifiers and performance
可以更改類成員的訪問說明符(例如從私有到受保護)會影響類的性能(執行速度)嗎? 如果是這樣,請解釋如何?
不。如果確實如此,我會認為你的編譯器被破壞了。
通常,編譯(非調試)可執行文件不包含有關布局,訪問級別甚至類成員類型的信息。 這些根本不是執行程序所必需的,因此在通常的“不為你不使用的東西買單”時,它們會完全被剝離,因此不會對性能產生任何影響。
從理論上講,它可能間接影響優化器,但我懷疑它在實踐中是否存在。 - 斯拉瓦
有道理。 在C ++中,訪問說明符只是在命名時執行的健全性檢查。 它總是最后執行(在重載解析,名稱查找等之后),並且只有兩個結果:命名實體是可訪問的,一切都很好,或者編譯暫停。 它根本無法改變程序的可觀察行為。 因此,它對性能有任何影響確實很奇怪。
更改數據成員的訪問說明符可能會影響布局 。
如果您擁有使用offsetof
或公共初始序列的(先前)標准布局類型的用戶,則更改成員訪問級別的突然未定義行為允許編譯器在消除“死”代碼時有大量余地。
即使沒有它,您可能已經以特別粗糙的順序聲明了public
數據成員,而private
成員允許更有利的布局。 (或相反亦然)
但是,您可以自由地重新排序類成員的聲明,並且對您的代碼沒有其他可觀察到的差異。 您不應僅為了重新排序而更改成員的訪問說明符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.