static_cast,const_cast,dynamic_cast,reinterpret...

标准C++不只支持C风格类型转换符,还定义了如下四种类型转换符:html

static_cast
const_cast
dynamic_cast
reinterpret_cast

定义这些类型转换符是为了提供更好的类型检查。程序员

1、C风格类型转换符的缺点编程

C++支持如下两种形式的C风格类型转换:安全

int age=(int)sqrt(foo/3.25);     
 int age=int(sqrt(foo/3.25));

可是,这样会使程序的意图不明确,由于相同的语法你却使用不一样的类型转换符…spa

(译者:不是很明白这一段是什么意思,但愿哪位大侠能更改一下)ssr

2、四种类型转换符指针

1.static_cast是这四种中最经常使用的。它可用于任何隐含的类型转换——通常来讲,当一个隐含的类型转换致使信息丢失时,编译器就会输出警告信息,但你若是使用static_cast的话,编译器就不会输出这些警告信息。static_cast能够用于类类型的向上或向下转换(dynamic_cast也能够,但不一样的是,static_cast不会进行动态类型检查,所以它的安全性要由程序员来保证)。code

2.const_cast能够用来移除一个变量的const或volatile属性。orm

3.dynamic_cast能够用来对一个多态的指针或引用进行类类型向上、向下转换。注意:dynamic_cast进行动态类型检查,所以,在对一个指针进行类型转换时,若是对象不是编译器所指望的类型,它将会返回NULL;在对引用进行类型转换时,它会抛出一个std::bad_cast异常。htm

4.reinterpret_cast用于两个不相关类型之间的类型转换。这个关键词在咱们须要把类型映射回原有类型时用到它.咱们映射到的类型仅仅是为了故弄玄虚和其余目的,这是全部映射中最危险的(这句话是C++编程思想中的原话)。

 

相关连接: http://www.acm.org/crossroads/xrds3-1/ovp3-1.html

译自:http://www.cppreference.com/wiki/cn:keywords:casting_comparison

相关文章
相关标签/搜索