类型转换运算符

C++支持c风格的强制类型转换。但在c++中,推荐类型安全的转换方式。

C++提供了四种用于类型转换的运算符:
static_cast、dynamic_cast、reinterpret_cast、const_cast。

1。static_cast : 用于在相关联的指针类型之间进行转换,也可以显式执行标准数据类型的类型转换。而它的转换时期是编译期间(故其名字中含有一个static),确保指针被转换成相关类型(int, float, double),如果类型不匹配,会产生编译错误。c中的指针可以转化为完全不相关的类型,编译器无法发现错误。
例如:
double pi = 3.141592654;
int p = static_cast pi;
类似基类转派生类,派生类转基类可行。void*可转int*, double可转int. 但int* 无法转char *。以前这个c无法检测出来,但现在c++可行。

2。dynamic_cast: 发生在运行期间的强制类型转换。与上面不同,这个转换不成功,会返回空指针。dynamic_cast针对class的类型装换

3。reinterpret_cast:将一种对象类型转化成另一种,不管它们是否相关。它往往用于转换static_cast不允许转换的地方。
例:

  #include <iostream>
           #include <stdlib.h>
           #include <string>
           using namespace std 

     int main(int argc,char **argv)
     {
         void *p = new int[8];
         int *ptr = reinterpret_cast<int*>(p);
         char *pc = reinterpret_cast<char*>(ptr);
     } 
 使用static_cast编译是出错的,然而这里就可以编译。它只改变对指针的操作,但不进行对齐操作。通俗一点,就是指针的值绝对不会改变,但C风格类型转换可能会改变指针的值。

4。const_cast:可以去掉对象的const访问属性,不到万不得已不能使用,本来别人设置const属性就是不希望你改变它的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值