美文网首页
c++中的标准布局

c++中的标准布局

作者: 秋冬不寒 | 来源:发表于2022-05-20 20:33 被阅读0次

标准布局类型

定义

当类或结构不包含某些 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<Derived> == false!
struct Derived : public Base
{
   int x;
   int y;
};

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

struct Base
{
   void Foo() {}
};

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

相关文章

网友评论

      本文标题:c++中的标准布局

      本文链接:https://www.haomeiwen.com/subject/sifqprtx.html