1. 程式人生 > >C++11的POD型別

C++11的POD型別

POD型別的定義

必須是平凡的和有標準佈局的。

平凡的建構函式與解構函式是預設的,不起任何作用的。如果自定義了,那麼需要宣告為default型別的。

使用std::is_trivial進行判別。

標準佈局必須是有以下幾個屬性:

  • 所有的非靜態成員有相同的訪問許可權
  • 類或者體系結構繼承時,必須有下面兩種情況之一:
    • 派生類中有非靜態成員,且僅有一個包含靜態成員的基類
    • 基類有非靜態成員,而派生類沒有非靜態成員
  • 類中第一個非靜態成員與基類不同
  • 沒有虛擬函式和虛基類
  • 所有的非靜態成員均符合標準佈局型別,其基類也符合標準佈局

使用std::is_standard_layout 進行判別

POD型別的應用

主要有3點優勢:

  • 位元組賦值,可以使用memsetmemcpy進行初始化、拷貝等
  • 提供對C記憶體佈局的相容
  • 暴增靜態初始化的安全有效。