static_cast和dynamic_cast都是C++中的类型转换操作符,但它们有着不同的用途和限制: static_cast:静态类型转换 static_cast进行的是编译时的类型转换,只能用于已知的类型之间的转换,且不能转换掉const、volatile等属性。主要用于基本数据类型的转换、隐式转换的显式化和向上转型(子类指针或引用转为父类指针或引用)。
1. static_cast : 父类转子类:可以转,不报错,不安全; 2.static_casrt : 子类转父类:可以转,不报错,安全; 3.dynamic_cast : 父类转子类 : a)若父类中没有虚函数,不能转,编译报错; b)若父类至少有一个虚函数则可以转,不报错;但: b.1)若父类指针指向的确实是一个子类对象,则dynamic_cast返回该...
dynamic_cast< type_id >(expression) type_id 必须是类的指针、类的引用或者void*。 主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。 dynamic_cast只能用于含有虚函数的类; 进行上行转换的时候,与static_cast 的作用一样。下行转换的时候,具有类型检查的功能,比static_cast更安全。 dynamic_c...
对于上行转换,static_cast和dynamic_cast效果一样,都安全; 对于下行转换:你必须确定要转换的数据确实是目标类型的数据,即需要注意要转换的父类类型指针是否真的指向子类对象,如果是,static_cast和dynamic_cast都能成功;如果不是static_cast能返回,但是不安全,可能会出现访问越界错误,而dynamic_cast在运行时类型检查过程...
【格式】dynamic_cast<type_id>(expression) : 该运算符把expression转换为type_id 类型, type_id 可以为类的指针、类的引用、void*,expression为对应的指针或引用. 1. 2. 3. dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用。
一下C++中static_cast 和 dynamic_cast 的区别。相关知识点: 试题来源: 解析 答:static_cast 用于有比较明确定义的变换,包括不需要强制转换的变换。 dynamic_cast 适用于类型安全的向下转换,常用在继承中的父类指针向子类指针的转换。若转换成功则返回改类型的指针,若失败,则返回NULL。
static_cast和dynamic_cast都可以⽤于类层次结构中基类和⼦类之间指针或引⽤的转换。所不同的是,static_cast仅仅是依靠类型转换语句中提供的信息(尖括号中的类型)来进⾏转换;⽽dynamic_cast则会遍历整个类的继承体系进⾏类型检查。⽐如:class B { public:virtual void Test(){} };class D : ...
对于上行转换,dynamic_cast和static_cast是一样的。 对于下行转换,说到下行转换,有一点需要了解的是在C++中,一般是可以用父类指针指向一个子类对象,如parent* P1 = new Children(); 但这个指针只能访问父类定义的数据成员和函数,这是C++中的静态联翩,但一般不定义指向父类对象的子类类型指针,如Children* P1 = ...
子类转基类:dynamic_cast和static_cast的效果是一样的; 基类转子类:dynamic_cast具有类型检查的功能,比static_cast更安全。 下面通过一段代码来看看两者的区别 class base{ public: int age; string name; public: virtual void func(); //如果用到dynamic_cast,则基类需要提供虚方法 ...
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_cast(pb);