在CPP中的强制转换有static_cast,reinterpret cast和dynamic_cast等。 两种风格上的类型,CPP风格会去做一些类型检测,从而相对c风格会安全一点。 今天来学习一下dynamic_cast。 C++中的dynamic_cast中相对旧式转换的安全性体现 首先,dynamic_cast专门用于继承结构(基类和子类)中的类型转换。 这里先
1)static_cast :编译时期的静态类型检查 static_cast < type-id > ( expression ) 该运算符把expression转换成type-id类型,在编译时使用类型信息执行转换,在转换时执行必要的检测(指针越界、类型检查),其操作数相对是安全的 2)dynamic_cast:运行时的检查 用于在集成体系中进行安全的向下转换downcast,即基类指针/引...
D *pd2 = dynamic_cast<D *>(pb); //pd2 is NULL delete pb; } 在函数foo中,使用static_cast进行转换是不被允许的,将在编译时出错;而使用 dynamic_cast的转换则是允许的,结果是空指针。 reinpreter_cast 用法:reinpreter_cast<type-id> (expression) type-id必须是一个指针、引用、算术类型、函数指针或者...
dynamic_cast和static_cast区别传统的A* a = (A*)p强制类型转换相当于static_cast,得到的总是一个内存地址,而dynamic_cast则更安全,转换失败会得到NULL。 dynamic_cast和static_cast区别用如下例子程序非常容易理解: class Base { public: virtual ~Base(){}; }; class A : public Base { }; class B :...
(4)在类的转换时,在类层次间进行上行转换(子类指针指向父类指针)时,dynamic_cast 和 static_cast 的效果是一样的。在进行下行转换(父类指针转化为子类指针)时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全。 向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与...
int i = static_cast<int>(d); // 强制将 double 转换为 int dynamic_cast:主要用于具有多态性的类指针或引用之间的安全向下转换。 cpp class Base { virtual void foo() {} }; 70316831.com/kcoc8 www.taoshangzhijia.cn/pgiq0 www.wzssjm.com/idln4 ...
使用static_cast进行的基类到派生类转换(向下转换)不会在运行时检查该对象的动态类型确实为D,因此它只能在该前提条件通过其他方法保证时,例如在实现静态多态时,才能安全使用。安全的向下转换可以用dynamic_cast执行。 static_cast也能用来通过进行到指定类型的函数到指针转换来消解函数重载的歧义,如 ...
static_cast,非多态类型的转换,不执行运行时类型检查,通常来说只用于转换数值数据类型,可以实现子类的向上转换; dynamic_cast,用于多态类型的转换,转换时进行类型检查,只适用于指针或引用,不明确的指针的转换会返回空指针但不引发异常,可以实现向上转换或者向下转换; const_cast,取消const的只读语义; reinterpret_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 <D *> (pb); ...
static_cast,非多态类型的转换,不执行运行时类型检查,通常来说只用于转换数值数据类型,可以实现子类的向上转换;dynamic_cast,用于多态类型的转换,转换时进行类型检查,只适用于指针或引用,不明确的指针的转换会返回空指针但不引发异常,可以实现向上转换或者向下转换;const_cast,取消const的只读语义;reinterpret_cast,对位的...