Pau*_*arr 4 c++ private class member undefined-behavior
我有一个基本的C++问题,不幸让我感到困惑.最近我遇到了一篇文章,该文章使用向下转换来使用向下转换来访问类的私有成员.我的问题是它为什么有效?
鉴于我有一个父类P,其私有成员m_p的类型为dummy*,那么使用的方法是创建一个hack类hackP,如下所示:
class hackP: public P {
public:
dummy *m_p;
};
Run Code Online (Sandbox Code Playgroud)
显然,使用像这样的代码片段可以访问class P私有成员m_p
P parent = ...;
hackP *hp = (hackP*)&parent;
// access parent m_p as hp->m_p
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
看起来GotW #76 访问权利的使用和滥用很好地涵盖了这个主题,我不得不说我选择了一些我不知道的有趣的tid位.
本文访问私有成员.这很简单!需要更多的努力来包裹你的头脑,但似乎更灵活.
这个答案从这个线程是私有成员的黑客定义的行为?这是非常相似但不相同似乎表明这是未定义的行为,因为布局不保证在access-qualifier各部分之间是相同的 .从C++标准草案中,9.2 类成员说(强调我的):
分配具有相同访问控制(第11条)的(非联合)类的非静态数据成员,以便后面的成员在类对象中具有更高的地址.未指定具有不同访问控制的非静态数据成员的分配顺序(11).
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |