**:
(c++-98:1.8;5)給出的定義:
將物件的各位元組拷貝到乙個位元組陣列中,然後再將它重新拷貝到原先的物件所佔的儲存區中,此時該物件應該具有它原來的值。
《imperfect c++》一書中給出的定義和一些特性利用:
1、所有標量型別、pod結構型別、pod聯合型別、以及這幾種型別的陣列、const/volatile修飾的版
本都是pod型別。
2、pod結構/聯合型別:乙個聚合體(包括class),它的非static成員都不是pointer to member、
pointer to member function、非pod結構、非pod聯合,以及這些型別的陣列、引用、const/
volatile修飾的版本;並且,此聚合體不能有使用者自定義constructor、destructor、assign
operator。
3、pod型別可以具有static成員、成員typedef、巢狀struct/class定義和成員函式/方法。
pod型別特性:
所有pod型別都可以作為union的成員,反之,所有非pod型別都不能作為union的成員。
pod特性利用:
我們可以利用pod型別特性來判斷乙個型別是否為pod型別:
template struct must_be_pod;};
這個模板的意思是,只要型別t是非pod型別,那麼編譯器將報錯,因為t被作為了union的乙個成員。
使用示例:
template
void func(const t& val)
**:
偶爾在一些文字資料和 c++ 文件以及 microsoft .net 框架中看到術語「pod 型別」。這個術語是什麼意思?
shelby nagwitz
為了將 pod 型別概念化,你可以通過拷貝其位元來拷貝它們。此外, pod 型別可以是非初始化的。例如:
struct rect r; // value undefined非 pod 型別通常需要初始化,不論是呼叫預設的建構函式(編譯器提供的)還是自己寫的建構函式。point *ppoints = new point[100]; // ditto
cstring s; // calls ctor ==> not pod
過去, pod 對於編寫編譯器或與c 相容的 c++ 程式的人來說很重要。現在,pod 來到 .net 的環境中。在託管 c++ 中,託管型別(包括 __value 和 __gc 兩者)能包含嵌入的原生 pod 型別。 figure 3
展示了例舉說明**。託管的 circle 類能包含 point,但無法包含 cpoint 類。如果你嘗試編譯 pod.cpp 會報乙個 c3633 錯誤:「cannot define ''m_center'' as a member of managed ''circle'' because of the presence of default constructor ''cpoint::cpoint'' on class ''cpoint''.」(譯者:意思是由於類 cpoint 有預設的建構函式『cpoint::cpoint』,所以不能將『m_center』定義為託管類『circle』的乙個成員)
.net 限定嵌入的本地物件只能為 pod 型別的理由是這樣做能安全地拷貝它們,不用擔心呼叫建構函式,初始化虛表,或任何非 pod 型別需要的其它機制。
關於C 中的POD型別
pod型別 plain old data 我第一次是在morden c design中看到的。說實話這確實是一本好書,裡面的技巧讓人嘆為觀止。裡面提到了pod型別,該型別相容c語言的struct,主要的用處是,pod物件 特別是陣列 在進行複製的時候,不必呼叫物件的複製建構函式或者operator ...
關於C 中的POD型別
最近碰到筆試題中有關於pod型別的問題,看了好多部落格對此還是沒有理解透徹,總結在此便於日後學習.pod全稱plain old data。通俗的講,乙個類或結構體通過二進位制拷貝後還能保持其資料不變,那麼它就是乙個pod型別。平凡的定義 1.有平凡的建構函式 2.有平凡的拷貝建構函式 3.有平凡的移...
c 的POD型別詳解
最早看到pod plain old data 型別,是在imperfect c 裡。我覺得這是一本把我帶到c 世界裡的一本很重要的書。書裡是這樣解釋pod的 1 所有標量型別 基本型別和指標型別 pod結構型別 pod聯合型別 以及這幾種型別的陣列 const volatile修飾的版 本都是pod...