gpt4 book ai didi

c++ - 为什么 C++ 标准特别允许关于具有不同访问说明符的类数据成员的内存布局的余地?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:49 25 4
gpt4 key购买 nike

C++11 标准要求对类的非静态数据成员在内存中进行排序,但随后专门为具有不同访问说明符的成员开辟了一个豁免。

为什么?

§ 9.2.13

Nonstatic data members of a (non-union) class with the same access control (Clause 11) are allocated so that later members have higher addresses within a class object. The order of allocation of non-static data members with different access control is unspecified (Clause 11). Implementation alignment requirements might cause two adjacent members not to be allocated immediately after each other; so might requirements for space for managing virtual functions (10.3) and virtual base classes (10.1).

标准的这一部分以前在 stackoverflow 上出现过,但我认为它从未被解释过。

最佳答案

N2062是第一篇处理 C++98/03 的 POD 定义变化的 C++ 论文。它是作为解决 core issue 568 的一种手段而编写的。 ,这是关于 POD 和类型布局的。它代表了导致 C++11 的标准布局和琐碎的可复制性定义的设计的开始。

然而,N2062 甚至从未考虑定义具有不同访问控制的成员的布局。它甚至没有说明为什么要实现此限制。 the final version of that proposal 也没有,这实际上给了我们简单可复制和标准布局的定义。这些提案的所有版本都将访问控制限制视为既成事实,而不是本来可以改变的事情。

所有这些都表明该提案的作者至少了解一种编译器/ABI,它可以根据访问控制更改成员的顺序。

关于c++ - 为什么 C++ 标准特别允许关于具有不同访问说明符的类数据成员的内存布局的余地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com