c++强制类型转换笔记

强制类型转换

类型转换是有风险的!
损失精度
越界
。。。
类型转换运算符
老的类型转换的方式:
类型转换操作符(type conversion operator)是一种特殊的类成员函数,
它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。
T1::operator T2() [const];   //T1的成员函数,”(T2)a”类型转换
转换函数必须是 成员函数,不能 指定返回类型,并且形参表必须为空;返回值是隐含的,返回值是与转换的类型相同的,即为上面原型中的T2;

  1. T2表示内置类型名(built-in type)、类类型名(class type)或由类型别名(typedef)定义的名字;
    对任何可作为函数返回类型的类型(除了 void 之外)都可以定义转换函数,
    一般而言,不允许转换为数组或函数类型,
    转换为指针类型(数据和函数指针)以及引用类型是可以的;

  2. 转换函数一般不应该改变被转换的对象,因此转换操作符通常应定义为 const 成员;

  3. 支持继承,可以为虚函数;

  4. 只要存在转换,编译器将在可以使用内置转换的地方自动调用它;

个人理解 就是你要强制类型转换某个类对象 那么你就要在这个类里重载强制类型转换运算符函数
这样在遇到强制类型转换的时候就会调用这个成员函数 进而转换

如果强制类型转换除了问题如果没用以下的方式 则查找问题在哪很难
而用的是下面的方法则搜索cast就可以了

cast 投影投射的意思
强制类型转换 看起来像模板一样 使用的时候后面跟上<转换成的类型> n = static_cast(a); //调用a.operator int,

static_cast

比较自然和低风险的转换 比如整形,实数型和字符型之间的转换
不能用于不同类型指针的相互转换  
不能用于整形和指针的相互转换
不能用于不同类型的引用之间的转换

interpret_cast

reinterpret_cast用来进行
各种不同类型的指针之间的转换、
不同类型的引用之间转换、
以及指针和能容纳得下指针的整数类型之间的转换。 指针转换成int 可以都是4个字节 指针转换成short不可以
转换的时候,执行的是逐个比特拷贝的操作。

const_cast

去除const属性的转换
将const 引用转换成同类型非const引用
将const指针转换成同类型非const指针

dynamic_cast

特别有用  是通过虚函数表指针判断对象是属于那个类 如果不是虚函数类那就无从判别
专门用于将多态基类的指针或者引用强制转换成派生类的指针或者引用           
多态基类是什么??包含虚函数的基类就是多态基类
并且可以检查转换的安全性
对于不安全的转换结果返回NULL指针  可以用于判断指针转换是否成功 
不能用于非多态基类指针或者引用强制转换成派生类的指针或者引用
对于基类的引用转换为派生类的引用怎么判别是否成功?  看是否抛出异常


也就是说基类指针转换成派生类的指针仅在基类指针确实指向的是一个派生类对象的时候 才安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值