标准N3797::5.5/4
:
缩写
pm-expression.*cast-expression
为E1.*E2
,E1
被调用 对象表达式。 如果E1的动态类型不包含 <{1}}引用的成员,行为未定义
你能提供一个例子来描述这里描述的UB吗?
答案 0 :(得分:0)
这意味着运行时E1
的实际类型没有成员E2
。当E1
是实际具有成员E2
的类型的基类的实例时,会发生一个简单的情况。
struct A
{
};
struct B : public A
{
int b;
};
int main()
{
A* a = new A();
B* b = static_cast<B*>(a);
int B::* pbm = &B::b;
(*b).*pbm = 6;
}