总体来看,子类指针转成父类指针无论怎样都是安全、允许的(上面的2、4),所以static_cast和dynamic_cast都可以安全使用。 再说上面的1、3。 其实,static_cast相当于我们程序员对编译器的一种承诺:我们清楚地知道这样转存在的任何风险,并且我们能够接受这样的风险。所以,当我们用static_cast将父类指针转换成子类指针时...
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换(cross cast)。 在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的【父类指针本身就可指向一个子类对象】; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 dynamic_cast是唯一无法由旧式语法执...
1. static_cast<void*>()静态转换 static_cast和 reinterpret_cast的几种使用场景 2. reinterpret_cast<void *>()重新解释转换 A:指针与整数之间的转换: B:指针之间的转换 C:不相关类型的指针之间的转换 D:函数指针之间的转换: 3. const_cast 常量转换 4. dynamic_cast 动态转换 5. 重点-深入理解下reinter...
但是dynamic_cast也不是一无是处,谷歌C++编程规范中指出,该类型转换函数可以在单元测试(unit test)中放心的进行使用,比如测试工厂类返回的派生类是否正确,可以使用该技术,但是在实际的上线生产代码中不要进行使用 所以,在实际的编程实践中,应该在出了单元测试代码中,避免使用dynamic_cast转而使用static_cast,并且在代...
1.static_cast关键字(编译时类型检查) 2.dynamic_cast关键字(运行时类型检查) 1.static_cast关键字(编译时类型检查) 用法: static_cast < type-id > ( expression ),该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性 ...
主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。 dynamic_cast只能用于含有虚函数的类; 进行上行转换的时候,与static_cast 的作用一样。下行转换的时候,具有类型检查的功能,比static_cast更安全。 dynamic_cast会先检查是否能转换成功,如果能则转换,不能则返回0。
C++ 中的类型转换:static_cast、dynamic_cast 等的应用场景 一、static_cast的应用场景 基本数据类型之间的转换 可以用于基本数据类型之间的转换,比如int转换为double,float转换为int等。 父类指针向子类指针的转换 当需要将父类指针转换为子类指针时,可以使用static_cast。
英伟达C++一面static_cast与dynamic_cast的区别?dynamic_cast的原理 2397 11 2024-12-20 14:54:34 未经作者授权,禁止转载 您当前的浏览器不支持 HTML5 播放器 请更换浏览器再试试哦~56 28 108 5 本视频思维导图、应届生校招规划、C++八股文领取:Mark19929 2024...
classAnimal{public:virtualvoidcry()=0;}classDog:publicAnimal{public:virtualvoidcry(){cout<<"汪汪"<<endl;}voiddoHome(){cout<<"看家"<<endl;}}voidteat(){Aniaml*a=newDog();a->cry();Dog*dog=dynamic_cast<Dog*>a;if(dog!=NULL)//这种情况下 可以将父类指针转换为子类指针并且不会报错{dog...
static_cast和dynamic_cast都可以⽤于类层次结构中基类和⼦类之间指针或引⽤的转换。所不同的是,static_cast仅仅是依靠类型转换语句中提供的信息(尖括号中的类型)来进⾏转换;⽽dynamic_cast则会遍历整个类的继承体系进⾏类型检查。⽐如:class B { public:virtual void Test(){} };class D : ...