c++中的标准布局

标准布局类型

定义

当类或结构不包含某些 C++ 语言功能(例如无法在 C 语言中找到的虚拟函数),并且所有成员都具有相同的访问控制时,该类或结构为标准布局类型。

特点

  • 可以在内存中对其进行复制,并且布局已经过充分定义,可以由 C 程序使用。

  • 标准布局类型可以具有用户定义的特殊成员函数。

  • 没有虚拟函数或虚拟基类

  • 所有非静态数据成员都具有相同的访问控制

  • 类类型的所有非静态成员均为标准布局

  • 所有基类都为标准布局

  • 没有与第一个非静态数据成员类型相同的基类。

  • 满足以下条件之一:

    • 最底层派生类中没有非静态数据成员,并且具有非静态数据成员的基类不超过一个,或者

    • 没有含非静态数据成员的基类

以下代码演示标准布局类型的一个示例:

struct SL
{
   // All members have same access:
   int i;
   int j;
   SL(int a, int b) : i(a), j(b) {} // User-defined constructor OK
};

可能使用代码能够更好地说明最后两个要求。 在下一个示例中,即使 Base 是标准布局,Derived 也不是标准布局,因为它(最底层派生类)和 Base 都具有非静态数据成员:

struct Base
{
   int i;
   int j;
};

// std::is_standard_layout == false!
struct Derived : public Base
{
   int x;
   int y;
};

在此示例中,Derived 是标准布局,因为 Base 没有非静态数据成员:

struct Base
{
   void Foo() {}
};

// std::is_standard_layout == true
struct Derived : public Base
{
   int x;
   int y;
};

你可能感兴趣的:(c++中的标准布局)