C++ POD types

Plain Old Data

POD是Plain Old Data的縮寫,C++ POD types的對(duì)象需要滿足兩個(gè)條件:

  1. 支持static initialization(不必dynamic initialization)
  2. 內(nèi)存布局需要和對(duì)應(yīng)的C struct的內(nèi)存布局相同

這就意味著POD對(duì)象存儲(chǔ)在連續(xù)的內(nèi)存區(qū)域,并且可以清楚的用對(duì)象的地址訪問到成員的地址。

1就是trivial types的充要條件,2就是standard-layout types的充要條件,兩者合起來就是POD的條件。

Trivial types

具體的Trivial types的定義請(qǐng)看TrivialType

在我理解上,trivial type保證的是對(duì)象的在內(nèi)存中連續(xù)存儲(chǔ),并且可以使用memcpy拷貝對(duì)象而不會(huì)破壞對(duì)象,但是不能保證內(nèi)存中成員是怎樣的一個(gè)布局。

Trivial type需要滿足下面兩個(gè)條件:

  • has a trivial default constructor
  • is trivially copyable

trivial default constructor 指:

  1. 不是用戶提供的
  2. 類沒有虛函數(shù)和虛基類
  3. 沒有類內(nèi)初始化
  4. 類的成員和基類也遞歸地滿足1 2 3

is trivially copyable 指:

  1. has a trivial copy/move ctor
  2. has a trivial copy/move assignment operator
  3. has a trivial destructor

那什么是trivial的copy/move ctor或copy/move assignment operator呢?

  1. 不是用戶提供的
  2. 類沒有虛函數(shù)和虛基類
  3. 類的成員和基類也遞歸地滿足1 2

Aggregate

An aggregate is an array or a class (Clause 9) with no user-provided constructors (12.1), no brace-or-equal-initializers for non-static data members (9.2), no private or protected non-static data members (Clause 11), no base classes (Clause 10), and no virtual functions (10.3).

也就是說,聚合類在trivial class的基礎(chǔ)上可以有用戶提供的copy ctor, assignment operator,destructor,但是不能有用戶提供的非默認(rèn)的構(gòu)造函數(shù)。

Standard-layout types

具體的Trivial types的定義請(qǐng)看StandardLayoutType

幾個(gè)例子

struct N { // neither trivial nor standard-layout
   int i;
   int j;
    virtual ~N();
};

struct T { // trivial but not standard-layout
    int i;
private:
    int j;
};

struct SL { // standard-layout but not trivial
    int i;
    int j;
    ~SL();
};

struct POD { // both trivial and standard-layout
    int i;
    int j;
};

Reference

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容