【发布时间】:2015-08-13 08:46:17
【问题描述】:
我有一个特殊的 cpp 文件,我希望它可以访问所有内容。 我正在考虑定义:
#define private public
在文件的开头,而不是包含我需要的所有内容。
是否保证可以工作,或者编译器可以在这种情况下更改类的结构?
我不是在问它是聪明还是漂亮(显然不是),只是它是否会起作用。
具体来说,我使用的是 VS2013。
【问题讨论】:
-
这是一个非常糟糕的主意!
-
如果你使用标准库,这个定义会给出未定义的行为。
-
@DanielA.White 我完全同意。有时这被用作 hack,以使测试代码能够访问类内部函数。
-
"[class.mem]/13 分配具有相同访问控制(第 11 条)的(非联合)类的非静态数据成员,以便以后的成员具有类对象中的更高地址。具有不同访问控制的非静态数据成员的分配顺序未指定(第 11 条)。所以是的,理论上改变访问控制可能会改变类的二进制布局。此外,在程序的不同部分为同一个类提供两个不同的定义违反了一个定义规则,因此程序表现出未定义的行为。
-
在实践中,使用 MSVC 可能很难链接您的程序。我很确定 MSVC 将成员访问编码为损坏的名称。
标签: c++ visual-c++ language-lawyer