基本介紹
- 中文名:POD
- 外文名:Plain old data structure
- 縮寫:POD
- 領域:程式語言
- 釋義:一類數據結構
定義
- 標量類型(scalar type) ;
- POD類類型(POD class type)。
標量類型
- 算術類型(arithmetic type);
- 枚舉類型(enumeration type);
- 指針類型(pointer type);
- 指針到成員類型(pointer-to-member type)。
- 整數類型(integral type);
- 浮點類型(floating type)。
- 有符號整數類型 (signed char, short, int, long);
- 無符號整數類型(unsigned char, unsigned short, unsigned int, unsigned long);
- 字元類型char與寬字元類型wchar_t;
- 布爾類型bool。
- 空指針pointer-to-void (void *);
- 對象指針pointer-to-object與指向靜態數據成員的指針pointer-to-static-member-data (都是形如為T*,其中T是對象類型);
- 函式指針pointer-to-function與指向靜態成員函式的指針pointer-to-static-member-function (都是形如T (*)(...),T是函式的返回值的類型)。
POD類類型
- 指針到成員類型的非靜態數據成員(包括數組)。
- 非POD類類型的非靜態數據成員(包括數組)。
- 引用類型的(reference type)非靜態數據成員。
- 用戶定義的拷貝與賦值運算元。
- 用戶定義的析構函式。
- 用戶定義的構造函式。
- 私有或保護的非靜態數據成員。
- 基類。
- 虛函式。
C++11
- 有平凡的預設構造函式,可用這樣的默認語法:(SomeConstructor() = default;)
- 有平凡的copy與move構造函式,可用默認語法.
- 有平凡的copy與move運算符,可用默認語法.
- 有平凡的destructor,不能是虛函式.
- 沒有虛函式
- 沒有虛基類
- 所有非靜態數據成員有相同的訪問控制(public, private, protected)
- 所有非靜態數據成員,包括在任何基類中的,存在於類繼承體系中的一個類中
- 上述規則適用於所有基類與類繼承體系中的所有非靜態數據成員
- 沒有同一類型的基類型被定義為第一個非靜態數據成員
用途
表達式 | POD類型T | non-POD類型T |
---|---|---|
new T | 不初始化 | 預設初始化 |
new T() | 總是預設初始化 | |
new T(x) | 總是調用構造函式初始化 |
- 記憶體布局——POD對象的組成位元組是連續的。
- 初始化——對於non-const POD對象,如果沒有初始化聲明時,具有不確定的初值(indeterminate initial value). POD對象的預設初始化為0值. 靜態POD對象初始化為給定的初值,如果是局部靜態POD對象,在進入所在作用域之前初始化[§6.7, ¶4]; 對於非局部靜態POD對象,在任何動態初始化之前賦予初值.
- 拷貝——POD對象可直接拷貝(例如用memcpy())到其它字元數組或相同POD類型的對象,保持其值不變。POD類型可以用作標準模板字元串類的字元. 由於這個原因,函式的返回值如果是non-POD類型,則不能通過暫存器傳遞函式的返回值。
- 定址——一個POD對象的地址可以是一個地址常量表達式;一個對POD成員的引用可以是一個引用常量表達式。 一個POD-struct對象的指針,適合用reinterpret_cast轉換到它的初始值。