指向成员表达式UB的指针

时间:2014-09-27 08:40:15

标签: c++ class

标准N3797::5.5/4

  

缩写pm-expression.*cast-expressionE1.*E2E1被调用   对象表达式。 如果E1的动态类型不包含   <{1}}引用的成员,行为未定义

你能提供一个例子来描述这里描述的UB吗?

1 个答案:

答案 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;
}