指向成员表达式UB的指针

Pointer to member expression UB

本文关键字:指针 UB 表达式 成员      更新时间:2023-10-16

标准N3797::5.5/4:

pm-expression.*cast-expression缩写为E1.*E2,称为E1对象表达式如果E1的动态类型不包含E2所指的成员,行为未定义

你能提供一个生产UB的例子吗?

这意味着运行时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;
}