首页 > 代码库 > C++ 四种类型转换

C++ 四种类型转换

在写代码中经常会有很多的隐式类型转换或显式类型转换。

对于隐式的类型转换主要是放生在赋值的时候,讲变量赋值给不同类型的变量的时候就会发生类型转换,如果是宽化转换(即从占字节少的类型向占字节多的类型转换),这个时候是不会出现丢失数据的。如果是窄化转换(从占字节多的类型向占字节少的类型转换),这个时候就很有可能会出现丢失数据,或者数据错误(如从有符号向无符号转换,就可能会出现各种无法想象的问题)。。。所以这种情况应该尽量避免。

对于C风格显式转换,就是强制转换,可能会造成数据解释错误,也是很不安全的。

在C++中有四种类型转换:

static_cast <new_type> (expression) 静态转换

静态转换类似于C风格显式转换,但是会判断转换类型之间的关系,如果转换类型之间没有任何关系,则不可转换,编译器会报错。(不相关类型之间不可以发生转换).

dynamic_cast <new_type> (expression) 动态转换

动态转换有两个约束条件:其一是要求new_type为指针或引用,其二是下行转换时要求基类是多态的(基类中包含至少一个虚函数)。

动态转换支持上行转换和下行转换,但是对于不安全的下行转换,会返回NULL,提高安全性(上行转换:子类转化为父类,下行转换:父类转化为子类)。

reinterpret_cast <new_type> (expression) 重解释转换

重解释转换则是任何两个类型之间都可以转换,是最不安全的一种类型转换,尽量不要用。

const_cast <new_type> (expression) 常量向非常量转换

将常量转换为非常量,这个转换并不转换原常量本身,只是它返回的结果为非常量了

 

读:http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html总结,仅个人笔记。