簡體   English   中英

訪問說明符和性能

[英]Access specifiers and performance

可以更改類成員的訪問說明符(例如從私有到受保護)會影響類的性能(執行速度)嗎? 如果是這樣,請解釋如何?

不。如果確實如此,我會認為你的編譯器被破壞了。

通常,編譯(非調試)可執行文件不包含有關布局,訪問級別甚至類成員類型的信息。 這些根本不是執行程序所必需的,因此在通常的“不為你不使用的東西買單”時,它們會完全被剝離,因此不會對性能產生任何影響。


從理論上講,它可能間接影響優化器,但我懷疑它在實踐中是否存在。 - 斯拉瓦

有道理。 在C ++中,訪問說明符只是在命名時執行的健全性檢查。 它總是最后執行(在重載解析,名稱查找等之后),並且只有兩個結果:命名實體是可訪問的,一切都很好,或者編譯暫停。 它根本無法改變程序的可觀察行為。 因此,它對性能有任何影響確實奇怪。

更改數據成員的訪問說明符可能會影響布局

如果您擁有使用offsetof或公共初始序列的(先前)標准布局類型的用戶,則更改成員訪問級別的突然未定義行為允許編譯器在消除“死”代碼時有大量余地。

即使沒有它,您可能已經以特別粗糙的順序聲明了public數據成員,而private成員允許更有利的布局。 (或相反亦然)

但是,您可以自由地重新排序類成員的聲明,並且對您的代碼沒有其他可觀察到的差異。 您不應僅為了重新排序而更改成員的訪問說明符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM