1、dynamic_cast可以被用来将一种指针类型强制转换成另一种指针类型,或者将一种引用类型强制转换成另一种引用类型。 只有当被转换的对象是一个目标类型的对象或者是从一个目标类型派生出来的对象时,dynamic_cast才能成功执行。 例: Base *bp,b_ob; Derived *dp,d_ob; dp=dynamic_cast<Derived *>(&b_ob); //error!父类指针不能转为子类指针 bp=dynamic_cast<Base *>(&d_ob);//correct!子类指针可以转为父类指针 bp=&d_ob; dp=dynamic_cast<Derived *>(bp);//correct!父类指针bp实际指向的是子类对象,可以转为子类指针 bp=&b_ob; dp-dynamic_cast<Derived *>(bp);//error!父类指针实际指向的是父类对象,不可以转为子类指针 dp=&d_ob; bp=dynamic_cast<Base *>(dp);//correct!子类指针可以转为父类指针 2、const_cast最常用的用途就是删除const属性 例: void sqrval(const int &val) { int *p; p=const_cast<int *>(val);//通过const _cast抛掉了val的const属性,val值变得可修改 *p=*val**val; } int main() { int x=10; cout<<"x before call:"<<x<<endl; sqrval(&x); cout<<"x after call:"<<x<<endl; } 3、static_cast运算符执行非多态转换,任何标准转换都可以使用它,并且不执行运行时检查。 例: int i; static_cast<double>(i);//correct 4、reinterpret_cast运算符把一种类型转换成一个不同的类型。可以把一个指针类型转换成一个整数等。 例: char *p="hello"; int i; i=reinterpret_cast<int>(p); |