C++新式类型转换

C++的四种强制类型转换,因此C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast程序员

新类型的强制转换能够提供更好的控制强制转换过程,容许控制各类不一样种类的强制转换。C++风格的强制转换其余的好处是,它们能安全

更清晰的代表它们要干什么。程序员只要扫一眼这样的代码,就能当即知道一个强制转换的目的。函数

 

四种转换的区别:指针

1. static_cast:能够实现C++中内置基本数据类型之间的相互转换。若是涉及到类的话,static_cast只能在有相互联系的类型中进行相互转换!可是它没法将const转换为non-const,这个只有对象

    const_cast办获得。编译器

2. const_cast: const_cast操做不能在不一样的种类间转换。相反,它仅仅把一个它做用的表达式转换成常量。它可使一个原本不是const类型的数据转换成const类型的,或者把const属性去掉。编译

3. reinterpret_cast: 有着和C风格的强制转换一样的能力。它能够转化任何内置的数据类型为其余任何的数据类型,也能够转化任何指针类型为其余的类型。它甚至能够转化内置的数据类型为指针,ast

    无须考虑类型安全或者常量的情形。不到万不得已绝对不用。 意图执行低级低级转型,实际动做取决于编译器,这也就是表示他不可移植数据类型

4. dynamic_cast:引用

(1)其余三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。

(2)不能用于内置的基本数据类型的强制转换。

(3)dynamic_cast转换若是成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。

(4)使用dynamic_cast进行转换的,基类中必定要有虚函数,不然编译不经过。

(5)在类的转换时,在类层次间进行上行转换时,dynamic_cast和static_cast的效果是同样的。在进行下行转换时,dynamic_cast具备类型检查的功能,比static_cast更安全。向上转换即为指

       向子类对象的向下转换,即将父类指针转化子类指针。向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换之后的对象类型必定要相同,不然转换失败。

相关文章
相关标签/搜索