c++学习笔记--显示类型转换

来源:互联网 发布:电大数据库基础与应用 编辑:程序博客网 时间:2024/05/18 03:26

C++提供了四种显示的类型转换函数reinterpret_cast  const_cast  static_cast  dynamic_cast。前三种在编译时进行转换,最后一种在运行时进行转换。

******_cast<new_type>(expression);

reinterpret_cast将一个类型的指针,转换为另一个类型的指针,或者将指针值转换为一个整型数,不能用于非指针类型的转换。

double d=9.3;

double * pd=&d;


int *pi=reinterpret_cast<int *>(pd);

class A{};

class B{};

A *pa=new A();

B* pb=reinterpret_cat<B*>(pa);//相当于隐式转换B* pb=(B*)pa;


long j=reinterpret_cast<long>(pi);//相当于隐式转换long j=(long)pi;

与隐式转换一样,const指针无法转换为void指针。


const_cast类型转换函数用于消除指针变量的常量属性,将它转换为一个对应指针类型的普通变量,反过来也可以。

const int *pi=3.14;

int *pj=const_cast<int*>(pi);

const int*pk=const_cast<const int*>(pi);


static_cast主要用于基本类型之间和具有继承关系之间的类型之间的转换。可以将基类和继承类的指针进行互换,但无法将非指针继承类转化为基类或其它无继承关系的类。

int i=0;

double j=static_cast<double>(i);

base * pb=new base;

Derived* pd=static_cast<Derived *>(pb);


dynamic_cast 与static_cast相对,在运行时进行转换分析,只能在继承类的指针之间和引用之间进行转换,进行转换时会根据挡墙运行时类型信息(Run-Time Type Indentification),判断类型之间的转换是否合法;指针转换失败可通过判断是否为null指针进行检测,如果引用转换失败则抛出bad_cast异常。可以用于检测内存对象的类型信息。

工程-设置--c++-C++Language 勾选允许运行时类型信息RTTI



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 充电小米note2手机闪烁怎么办 小米6x上网慢怎么办 小米5数据上网慢怎么办 小米5c照相模糊怎么办 小米5充电很慢怎么办 iphone图库照片没了怎么办 我想通过微信号得到手机号怎么办 给充电宝充电慢怎么办 小米5s充不了电怎么办 百度网盘下载速度慢怎么办 负债累累没有钱没有资源怎么办 好福利密码忘了怎么办 手机无法申请百度网盘怎么办 魅族手机运行慢怎么办 阿里小宝卡流量用完了怎么办 阿里宝卡流量用完了怎么办 百度网盘本地空间不足怎么办 百度网盘空间不足怎么办 百度网盘容量不够怎么办 百度网盘内存不够怎么办 百度网盘储存空间不足怎么办 百度网盘手机号注销了怎么办 手机系统升级后照片没了怎么办 换手机照片没了怎么办 苹果手机icloud满了怎么办 百度网盘密码忘记怎么办 手机卡不用了支付宝账号怎么办 手机校园网不弹出登录界面怎么办 百度云需要邮箱验证怎么办 网页百度网盘不播放视频怎么办 手机qq邮箱中转站容量不足怎么办 qq邮箱容量满了怎么办 手机邮箱中转站容量不足怎么办 微信号登陆要好友验证怎么办 邮箱账号名忘了怎么办 苹果六话筒坏了怎么办 iphone后置摄像头坏了怎么办 苹果8听歌声音小怎么办 酷狗音乐没了怎么办 手机听歌音量小怎么办 苹果手机酷狗音乐打不开怎么办