访问c ++父类的私有成员

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)

任何帮助,将不胜感激.

Sha*_*our 5

看起来GotW #76 访问权利的使用和滥用很好地涵盖了这个主题,我不得不说我选择了一些我不知道的有趣的tid位.

本文访问私有成员.这很简单!需要更多的努力来包裹你的头脑,但似乎更灵活.

这个答案从这个线程是私有成员的黑客定义的行为?这是非常相似但不相同似乎表明这是未定义的行为,因为布局不保证在access-qualifier各部分之间是相同的 .从C++标准草案中,9.2 类成员说(强调我的):

分配具有相同访问控制(第11条)的(非联合)类的非静态数据成员,以便后面的成员在类对象中具有更高的地址.未指定具有不同访问控制的非静态数据成员的分配顺序(11).