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