LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 219|回复: 0

标准布局类型

[复制链接]
发表于 2024-1-28 23:36:56 | 显示全部楼层 |阅读模式
当类或结构不包含某些 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 都具有非静态数据成员:

C++

struct Base
{
   int i;
   int j;
};

// std::is_standard_layout<Derived> == false!
struct Derived : public Base
{
   int x;
   int y;
};
在此示例中,Derived 是标准布局,因为 Base 没有非静态数据成员:

C++

struct Base
{
   void Foo() {}
};

// std::is_standard_layout<Derived> == true
struct Derived : public Base
{
   int x;
   int y;
};
如果 Base 具有数据成员,并且 Derived 仅具有成员函数,则 Derived 也是标准布局。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表