【发布时间】:2020-04-07 12:38:26
【问题描述】:
我想以非限定方式(为什么?宏巫术)从班级本身外部访问Base 班级成员。策略是在Derived 类中执行此操作,并将指向Base 的指针转换为指向Derived 的指针(即使实例不是 Derived)。
就我的尝试而言,代码可以正确编译和运行:这是标准还是意外(以及标准的 UB)? coliru link
#include<iostream>
struct Base{
int a=3;
};
struct Derived: public Base{
int getA(){
// this scope has unqualified access to Base class members
return a;
}
};
int main(void){
Base b;
std::cerr<<((Derived*)(&b))->getA()<<std::endl;
}
【问题讨论】:
-
您想要一个language-lawyer 类型的答案(引用标准)还是引用cppreference.com 就足够了?
-
访问私有成员有合法途径:stackoverflow.com/questions/22624503/…
-
@JaMiT:即使编译器变得更智能,我也需要实现无法工作,所以语言律师类型的答案让我保证它在未来不会中断。
-
@AlanBirtles:我不需要访问私有成员(它们都是公共的),但我需要在类范围之外进行非限定访问。
-
也许真正的问题是宏魔法。
标签: c++ pointers inheritance casting downcast