C++类型转换符
来自cppreference.com
标准C++不仅支持C风格类型转换符,还定义了以下四种类型转换符:
- static_cast
- const_cast
- dynamic_cast
- reinterpret_cast
定义这些类型转换符是为了提供更好的类型检查。
[编辑] 一、C风格类型转换符的缺点
C++支持以下两种形式的C风格类型转换:
int age=(int)sqrt(foo/3.25); int age=int(sqrt(foo/3.25));
但是,这样会使程序的意图不明确,因为相同的语法你却使用不同的类型转换符...
(译者:不是很明白这一段是什么意思,希望哪位大侠能更改一下)
[编辑] 二、四种类型转换符
- static_cast是这四种中最常用的。它可用于任何隐含的类型转换——一般来说,当一个隐含的类型转换导致信息丢失时,编译器就会输出警告信息,但你如果使用static_cast的话,编译器就不会输出这些警告信息。static_cast可以用于类类型的向上或向下转换(dynamic_cast也可以,但不同的是,static_cast不会进行动态类型检查,因此它的安全性要由程序员来保证)。
- const_cast可以用来移除一个变量的const或volatile属性。
- dynamic_cast可以用来对一个多态的指针或引用进行类类型向上、向下转换。注意:dynamic_cast进行动态类型检查,因此,在对一个指针进行类型转换时,如果对象不是编译器所期望的类型,它将会返回NULL;在对引用进行类型转换时,它会抛出一个std::bad_cast异常。
- reinterpret_cast用于两个不相关类型之间的类型转换。这个关键词在我们需要把类型映射回原有类型时用到它.我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的(这句话是C++编程思想中的原话)。