日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ POD(Plain Old Data)类型

發(fā)布時間:2024/4/11 c/c++ 119 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ POD(Plain Old Data)类型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

群里發(fā)過來一份他們公司的筆試題,看了下,發(fā)現(xiàn)里面考了一個判斷如下是否為POD類型,沒搞明白什么是POD,多方查閱后,發(fā)現(xiàn)其實(shí)是指一個C風(fēng)格代碼的概念。

POD全稱Plain Old Data是指C風(fēng)格的struct結(jié)構(gòu)體定義的數(shù)據(jù)結(jié)構(gòu),其中struct結(jié)構(gòu)體中只能定義常規(guī)數(shù)據(jù)類型(不能含有自定義數(shù)據(jù)類型)。它僅作為被動的收藏的字段值,不使用封包或者other object-oriented特征。

對于POD類型T的對象,不管這個對象是否擁有類型T的有效值,如果將該對象的底層字節(jié)序列復(fù)制到一個字符數(shù)組(或者無符號字符數(shù)組)中,再將其復(fù)制回對象,那么該對象的值與原始值一樣。

對于任意的POD類型T,如果兩個T指針分別指向兩個不同的對象obj1和obj2,如果用memcpy庫函數(shù)把obj1的值復(fù)制到obj2,那么obj2將擁有與obj1相同的值。

簡言之,針對POD對象,其二進(jìn)制內(nèi)容是可以隨便復(fù)制的,在任何地方,只要其二進(jìn)制內(nèi)容在,就能還原出正確無誤的POD對象。對于任何POD對象,都可以使用memset()函數(shù)或者其他類似的內(nèi)存初始化函數(shù)。

以上是C++?03標(biāo)準(zhǔn)中的定義。

正是因?yàn)?3標(biāo)準(zhǔn)中對POD限制的太嚴(yán)格了,所以C++?0x標(biāo)準(zhǔn)中隊(duì)POD的定義放寬了一些。

如果一個類或結(jié)構(gòu)是平凡的,具有標(biāo)準(zhǔn)布局的,且不包含任何非POD的非靜態(tài)成員,那么它就被認(rèn)定是POD。平凡的類或結(jié)構(gòu)定義如下:

1.具有一個平凡的缺省構(gòu)造器。(可以使用缺省構(gòu)造器語法,如 SomeConstructor() = default;)

2.具有一個平凡的拷貝構(gòu)造器。(可以使用缺省構(gòu)造器語法)

3.具有一個平凡的拷貝賦值運(yùn)算符。(可以使用缺省語法)

4.具有一個非虛且平凡的析構(gòu)器。

一個具有標(biāo)準(zhǔn)布局的類或結(jié)構(gòu)被定義如下:

1.所有非靜態(tài)數(shù)據(jù)成員均為標(biāo)準(zhǔn)布局類型。

2.所有非靜態(tài)成員的訪問權(quán)限(public, private, protected) 均相同。

3.沒有虛函數(shù)。

4.沒有虛基類。

5.所有基類均為標(biāo)準(zhǔn)布局類型。

6.沒有任何基類的類型與類中第一個非靜態(tài)成員相同。

7.要么全部基類都沒有非靜態(tài)數(shù)據(jù)成員,要么最下層的子類沒有非靜態(tài)數(shù)據(jù)成員且最多只有一個基類有非靜態(tài)數(shù)據(jù)成員。總之繼承樹中最多只能有一個類有非靜態(tài)數(shù)據(jù)成員。所有非靜態(tài)數(shù)據(jù)成員必須都是標(biāo)準(zhǔn)布局類型。

?

其實(shí)說到底,POD就是一個很常規(guī)的結(jié)構(gòu)體/類。看個例子:

struct mydata {mydata() : i(0), f(0.0f), c('1') {}int i;float f;char c; };

上面的結(jié)構(gòu)體在C++ 03中不算做一個POD,因?yàn)樗袠?gòu)造函數(shù),而在C++ 0x中,這個結(jié)構(gòu)體可以算作是一個POD類型,因?yàn)槠錆M足上面的條件(貌似沒有非虛的析構(gòu)函數(shù))。

不過這個東西就是個概念,不明白靠這個東西想了解應(yīng)聘者的什么知識,難道是對C++標(biāo)準(zhǔn)的了解?

總結(jié)

以上是生活随笔為你收集整理的C++ POD(Plain Old Data)类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。