C++ xxx_cast实现转换代码实例解析
1.1static_cast
static_cast可以在一个方向上实现隐式转换,在另一个方向上实现静态转换。其适用于单隐和双隐两种情况。
双隐
双隐即两边都可以直接进行隐式转换,适用于一般类型的数据转换(如int,float,double,long等数据类型之间的转换)
单隐
单隐即只能在一个方向上进行隐式转换,在另一个方向上只能实现静态转换。(如void*和指针之间的转换,任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针,因此将void*转换为任意类型的指针时就需要调用静态转换)
//首先要验证的是static_cast,其可以实现在一个方向上做隐式转换,另一个方向上做静态转换,可以适用于单隐和双隐两种情况 //首先是双隐,也就是两边都能直接进行隐式转换,一般适用于基本数据类型,如 inta=4; doubleb=3.2; a=b; b=a; cout<(b); b=static_cast(a); //然后是单隐,也就是说,只能从一遍到另一边进行隐式转换 //任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针 void*p=&b; int*q=&a; p=q; q=static_cast (p);
1.2reinterpret_cast
reinterpret_cast“通常为操作数的位模式提供较底层的重新解释”-->也就是说将数据以二进制的形式重新解释,在双方向上都不可以隐式类型转换的,则需要重新类型转换。可以实现双不隐的情况,如int转指针,指针转int等。
//双不隐 int*m=&a; intn=4; m=reinterpret_cast(n); n=reinterpret_cast (m);
1.3const_cast
Const_cast可用来移除非const对象的引用或指针的常量性。其可以将const变量转换为非const变量。其可以用于去除指针和引用的const,const_cast是对const的语义补充。其目标类型只能是引用或指针。
非const对象-->const引用或指针-->脱const-->修改非const对象
//const_cast-->用于去除非const对象的const,用于指针和引用 /************第一种情况,去引用的const化************/ intaa; constint&ra=aa; aa=100; cout<(ra)=300; cout< (pp)=500; cout<<*pp< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。