C 11 引入了普通旧数据 (POD) 类型的宽松定义,称为“标准布局”。该定义指定了类必须满足的严格标准才能被视为标准布局。该定义令人惊讶的方面之一是它对数据成员访问控制、与基类共享相同类型的数据成员以及构成类中存在多个数据成员的限制。
允许数据成员具有不同的访问控制会破坏第一个成员和完整对象具有相同地址的关键要求。这对于将标准布局对象地址有效转换为指向其第一个成员的指针是必需的。
如果第一个数据成员和基类共享相同的类型,它在内存布局中引入了歧义。将基类放在派生类之前的实现需要一个填充字节以防止地址冲突。这将再次阻碍对象地址与其第一个成员指针之间的可靠转换。
在单个类中,成员按照声明顺序依次分配。然而,跨类,标准布局并没有指定固定的分配顺序。在构成类中拥有多个数据成员会在确定内存中的“第一个”成员时带来不确定性,这对于上述地址转换至关重要。
以上是为什么C 11的'标准布局”需要严格的数据成员约束?的详细内容。更多信息请关注PHP中文网其他相关文章!