關於C 中POD型別的解析

2021-09-07 11:00:31 字數 1716 閱讀 3047

**:

(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

point *ppoints = new point[100];   // ditto

cstring s;                         // calls ctor ==> not pod

非 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...