首页 > 后端开发 > C++ > 为什么C 11的'标准布局”需要严格的数据成员约束?

为什么C 11的'标准布局”需要严格的数据成员约束?

DDD
发布: 2024-11-25 16:25:12
原创
1008 人浏览过

Why Does C  11's

理解 C 11 的 POD“标准布局”定义

C 11 引入了普通旧数据 (POD) 类型的宽松定义,称为“标准布局”。该定义指定了类必须满足的严格标准才能被视为标准布局。该定义令人惊讶的方面之一是它对数据成员访问控制、与基类共享相同类型的数据成员以及构成类中存在多个数据成员的限制。

为什么禁止不同的访问控制?

允许数据成员具有不同的访问控制会破坏第一个成员和完整对象具有相同地址的关键要求。这对于将标准布局对象地址有效转换为指向其第一个成员的指针是必需的。

为什么禁止第一个数据成员和基类之间的共享类型?

如果第一个数据成员和基类共享相同的类型,它在内存布局中引入了歧义。将基类放在派生类之前的实现需要一个填充字节以防止地址冲突。这将再次阻碍对象地址与其第一个成员指针之间的可靠转换。

构成类中多个数据成员的后果

在单个类中,成员按照声明顺序依次分配。然而,跨类,标准布局并没有指定固定的分配顺序。在构成类中拥有多个数据成员会在确定内存中的“第一个”成员时带来不确定性,这对于上述地址转换至关重要。

以上是为什么C 11的'标准布局”需要严格的数据成员约束?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板