読者です 読者をやめる 読者になる 読者になる

とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

standard-layout class

標準レイアウトクラス(standard-layout class)とは。

規格

N3337(PDF) 9/7,8

A standard-layout class is a class that:

— has no non-static data members of type non-standard-layout class (or array of such types) or reference,

— has no virtual functions (10.3) and no virtual base classes (10.1),

— has the same access control (Clause 11) for all non-static data members,

— has no non-standard-layout base classes,

— either has no non-static data members in the most derived class and at most one base class with non-static data members, or has no base classes with non-static data members, and

— has no base classes of the same type as the first non-static data member.108

A standard-layout struct is a standard-layout class defined with the class-key struct or the class-key class. A standard-layout union is a standard-layout class defined with the class-key union.

*1

標準レイアウトクラスは以下の6つの要件を満たす。

  • 非staticデータメンバとして以下を持たない。
    • 非標準レイアウトクラス
    • 非標準レイアウトクラスの配列
    • 参照
  • 以下を持たない。
    • 仮想関数
    • 仮想基底クラス
  • 全ての非staticデータメンバのアクセスコントロールが同じである。
  • 非標準レイアウトクラスを基底クラスとして持たない。
  • 次のいずれか。
    • 最派生クラスで非staticデータメンバを持たず、非staticデータメンバを持つ高々一つだけの基底クラスがある
    • 非staticデータメンバを持つ基底クラスを持たない
  • 最初の非staticデータメンバと同じ型の基底クラスを持たない。

structまたはclassをclass-keyとして持つ標準レイアウトクラスは標準レイアウト構造体(standard-layout struct)である。 unionをclass-keyとして持つ標準レイアウトクラスは標準レイアウト共用体(standard-layout union)である。

*1:自信がかなりないので指摘歓迎