簡體   English   中英

C++:POD 和 POD 包裝對象

[英]C++: POD and POD-wrapping objects

我經常聲明類來包裝單個普通舊數據值; 沒有虛函數的簡單類,例如:

class Velocity {
    int vel;
public:
    // functions to work with velocity ...
}
  1. 使用此類對象與使用 POD 值相同嗎? -- 如果在我的代碼中我使用的是int而不是Velocity ,空間或時間的使用有什么不同嗎? 標准對此有任何說明嗎?

  2. 我可以將指針或此類對象的數組轉換為 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.

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