4

不幸的是,我有一个基本的 C++ 问题让我感到困惑。最近我遇到了一篇文章,它使用向下转换来访问使用向​​下转换的类的私有成员。我的问题是它为什么有效?

鉴于我有一个父类 P 和一个类型为 dummy* 的私有成员 m_p ,那么使用的方法是创建一个 hack 类 hackP,如下所示:

class hackP: public P {
public:
dummy *m_p;
};

这显然可以使用类似的代码片段访问class P私有成员m_p

P parent = ...;
hackP *hp = (hackP*)&parent;
// access parent m_p as hp->m_p

任何帮助,将不胜感激。

4

1 回答 1

5

看起来GotW #76 访问权限的使用和滥用很好地涵盖了这个主题,我不得不说我从中发现了一些我不知道的有趣的花絮。

本文访问私人会员。这很容易!需要更多的努力来环绕你的头,但看起来更灵活。

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

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

于 2013-05-28T17:02:23.040 回答