簡體   English   中英

為什么C ++標准專門授予具有不同訪問說明符的類數據成員的內存布局方面的回旋余地?

[英]Why does the C++ standard specifically grant leeway regarding memory layout of class data members with different access specifiers?

C ++ 11標准要求對一個類的非靜態數據成員在內存中進行排序,但隨后專門為具有不同訪問說明符的成員免除費用。

為什么呢

第9.2.13節

分配具有相同訪問控制(條款11)的(非聯盟)類的非靜態數據成員,以便以后的成員在類對象中具有更高的地址。 未指定具有不同訪問控制的非靜態數據成員的分配順序(第11條)。 實施一致性要求可能會導致兩個相鄰成員不能彼此立即分配; 管理虛擬功能(10.3)和虛擬基類(10.1)的空間要求也可能如此。

標准的這一部分以前已經在stackoverflow上提到過,但是我認為還沒有得到解釋。

N2062是第一篇處理C ++ 98/03的POD定義更改的C ++論文。 編寫該文檔是為了解決核心問題568 ,該問題是有關POD和類型布局的。 它代表了設計的開始,最終導致了C ++ 11的標准布局和簡單的可復制性定義。

但是,N2062甚至從不考慮定義具有不同訪問控制的成員的布局。 甚至沒有給出為什么設置此限制的理由。 該提議的最終版本也沒有,它實際上為我們提供了可復制和標准版式的定義。 這些建議的所有版本都將訪問控制限制視為既成事實,而不是可能已更改的內容。

所有這些表明,該提案的作者至少具有一個基於訪問控制來更改成員順序的編譯器/ ABI的知識。

暫無
暫無

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

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