關於C 中的POD型別

2021-05-22 20:14:26 字數 1625 閱讀 4882

pod型別(plain old data),我第一次是在morden c++ design中看到的。說實話這確實是一本好書,裡面的技巧讓人嘆為觀止。裡面提到了pod型別,該型別相容c語言的struct,主要的用處是,pod物件(特別是陣列)在進行複製的時候,不必呼叫物件的複製建構函式或者operator=,可以直接採用memcpy函式來提高效率。morden c++ design裡面講,可以通過偏特化的方法萃取pod型別,但是沒有給出具體的方法,這一直困擾了我好久。

在侯捷對stl原始碼的剖析中,提到了sgi-stl中對pod型別萃取方式,但是本質上沒有通用性。基本的方式是,在某乙個類中增加乙個typedef,來標識這個類是pod型別,還是不是。例項**如下:

#include

usingnamespacestd;

classa

;

classb

;

template<class

t>

class

__traits

;

template<class

t>

void

check(t&t)

template<class

t>

void

_check(t&t,__false_type)

template<class

t>

void

_check(t&t,__true_type)

intmain()

今天看到了乙個方法,讓我眼前一亮,它能夠編譯期確定乙個型別是否為pod型別。但是,卻不能利用該特性進行型別萃取,只能判斷某一型別是否為pod型別,如果不是,編譯器報錯。方法如下:

template

struct must_be_pod ;

}; 

將乙個類作為模板形參傳入,如果其是pod型別,則可以放入union中,否則,不是pod型別。這裡其實,是將pod型別等價於可以放入union中的物件。c++中,可以放入union中的物件,是其本身以及其所有的成員變數都沒有預設建構函式的物件。

因此,目前對於pod型別的萃取,貌似依然沒有好的辦法……

關於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...

c 的POD型別詳解

最早看到pod plain old data 型別,是在imperfect c 裡。我覺得這是一本把我帶到c 世界裡的一本很重要的書。書裡是這樣解釋pod的 1 所有標量型別 基本型別和指標型別 pod結構型別 pod聯合型別 以及這幾種型別的陣列 const volatile修飾的版 本都是pod...