c 的POD型別詳解

2021-07-10 06:23:01 字數 1119 閱讀 2593

最早看到pod(plain old data)型別,是在imperfect c++裡。我覺得這是一本把我帶到c++世界裡的一本很重要的書。

書裡是這樣解釋pod的:

1、   所有標量型別(基本型別和指標型別)、pod結構型別、pod聯合型別、以及這幾種型別的陣列、const/volatile修飾的版

本都是pod型別。

2、  pod結構/聯合型別:乙個聚合體(包括class),它的非static成員都不是pointer to class member、

pointer to class member function、非pod結構、非pod聯合,以及這些型別的陣列、引用、const/

volatile修飾的版本;

並且,此聚合體不能有使用者自定義的建構函式、析構函式、拷貝建構函式.

3、  pod型別可以具有static成員、成員typedef、巢狀struct/class定義和 成員函式/方法。

(c++標準)給出的定義:

將物件的各位元組拷貝到乙個位元組陣列中,然後再將它重新拷貝到原先的物件所佔的儲存區中,此時該物件應該具有它原來的值。

pod型別的特點:

所有pod型別都可以作為union的成員,反之,所有非pod型別都不能作為union的成員。

pod特性利用:

我們可以利用pod型別特性來判斷乙個型別是否為pod型別:

templatestruct must_be_pod;};

這個模板的意思是,只要型別t是非pod型別,那麼編譯器將報錯,因為t被作為了union的乙個成員。

vs2008裡的測試**如下:

class a

void f()

protected:

private:

int i;

int j;

};templatestruct must_be_pod;};

must_be_poda; 編譯器會報錯:1>member 'must_be_pod::noname' of union 'must_be_pod::' has user-defined constructor or non-trivial default constructor

其實pod本質就是與c相容的資料型別。

關於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型別的解析

c 98 1.8 5 給出的定義 將物件的各位元組拷貝到乙個位元組陣列中,然後再將它重新拷貝到原先的物件所佔的儲存區中,此時該物件應該具有它原來的值。imperfect c 一書中給出的定義和一些特性利用 1 所有標量型別 pod結構型別 pod聯合型別 以及這幾種型別的陣列 const volat...