[英]C++: POD and POD-wrapping objects
我經常聲明類來包裝單個普通舊數據值; 沒有虛函數的簡單類,例如:
class Velocity {
int vel;
public:
// functions to work with velocity ...
}
使用此類對象與使用 POD 值相同嗎? -- 如果在我的代碼中我使用的是int
而不是Velocity
,空間或時間的使用有什么不同嗎? 標准對此有任何說明嗎?
我可以將指針或此類對象的數組轉換為 POD 值的指針/數組,反之亦然嗎? -- 我做Velocity *v = reinterpret_cast< Velocity* >( int_pointer )
是否完全安全?
使用此類對象與使用 POD 值相同嗎?
不。在上面使用memcpy
和朋友並不完全安全(僅允許在 POD 上使用!)。
我可以將指針或此類對象的數組轉換為 POD 值的指針/數組,反之亦然嗎?
如果它是一個 POD,你是完全安全的。 但這不是 POD,因為它有一個私有數據成員。
雙方的這一說,在實踐中它會正常工作對於類(C ++ 0x中,你被允許使用這樣的類與私有成員memcpy
,因為它允許它為所有平凡的可復制的類型,其中包括您的類型和許多其他非 POD)。
Re“與 POD 相同”,並不完全在 C++98 中。 C++98 不允許 POD 擁有私有成員。 C++0x 解除了這個限制(以及其他一些限制)。
再效率,或缺乏效率,這是一個實施質量問題。
要求您的編譯器進行優化,然后進行測量(如果重要)。
重新鑄造:不,具有實現定義的效果。 不要這樣做。
干杯 & hth.,
1)您的示例不是POD,因為該類具有私有字段
2)標准沒有定義使用 reinterpret_cast 時會發生什么。 發生的任何事情都是實現定義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.