- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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/
我已经可以在其中输入一些附加文本了mydomain/wiki/Special:UserLogin。我添加了一句话: In order to apply for an account send an m
有人可以解释以下脚本输出背后的逻辑吗? import numpy if(numpy.dtype(numpy.float64) == None): print "Surprise!!!!" 谢谢
是我还是 gmail bulls**t?在 outlook/浏览器上,我的电子邮件是完美的,但在 gmail 上,2 个表之间有一个空间,为什么?!?图片:http://i.imgur.com/srJ
我是一名优秀的程序员,十分优秀!