☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

用 static_cast 将基类引用转为派生类引用,基类为虚基类,或引用的实际对象并非派生类对象

C++-Undefined-Behavior-32
目录 › next › previous

示例:

struct A {};
struct B: A {};
struct C: virtual B {};

A a;
C c;
A& ra = a;
A& rc = c;

static_cast<B&>(ra);    // Undefined behavior
static_cast<C&>(rc);    // Undefined behavior

例中 ra 引用的是基类对象,将其转为派生类引用会导致未定义的行为,A 和 B 是 C 的虚基类,需要运行时数据体现虚基类对象和派生类对象的空间关系,static_cast 不考虑与运行时相关的转换逻辑,无法正确转换。

依据

ISO/IEC 14882:2003 5.2.9(5)-undefined ISO/IEC 14882:2011 5.2.9(2)-undefined

规则

ID_downCast
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.