指向成员表达式UB的指针
Pointer to member expression UB
标准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;
}
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- 通过指针恢复对数组的引用.UB与否?
- 传递给放置 new 的指针是否是指向其对象表示形式的非 UB 指针?
- 是否通过单元化指针UB访问静态类成员
- 当原始数据是常量时,修改指针指向的位置是 UB 吗?
- 通过reinterpret_casting方法指针从指针调用派生类的方法。这是 UB 吗?
- 泛型方法指针.reinterpret_cast指向不同类的方法指针,这是 UB 吗?
- 使用指针的法律遗留代码突然变成了 UB
- 移动指针是否经过结构成员 UB?并访问它?
- 在分配的存储UB上是指针算术
- 指向成员表达式UB的指针
- 关于指针积分加法中的类型、溢出和 UB 的混淆
- 同时修改指向值和指针UB