【发布时间】:2021-11-01 16:37:31
【问题描述】:
我已经多次看到以下模式用于访问受保护的成员函数。
class A{
public:
virtual ~A(){};
protected:
void foo(){}
};
class B : public A{};
class Hacky : public B{
public:
using B::foo;
};
int main(){
B b;
A& a = b;
auto ptr = &Hacky::foo;
(a.*ptr)();
}
我认为这是this page 之后的未定义行为,内置指向成员的访问运算符,第 5 点(这里 E1 动态类型是 B,它不包含 Hacky::foo),但我'我不能 100% 确定。有人能给出一个明确的答案吗?
【问题讨论】:
-
这个答案stackoverflow.com/questions/49550663/…是针对字段的,但是推理应该是一样的,
标签: c++ c++11 language-lawyer