时间:2021-05-20
1.1 static_cast
static_cast可以在一个方向上实现隐式转换,在另一个方向上实现静态转换。其适用于单隐和双隐两种情况。
双隐
双隐即两边都可以直接进行隐式转换,适用于一般类型的数据转换(如int, float, double, long等数据类型之间的转换)
单隐
单隐即只能在一个方向上进行隐式转换,在另一个方向上只能实现静态转换。(如void* 和指针之间的转换,任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针,因此将void*转换为任意类型的指针时就需要调用静态转换)
//首先要验证的是static_cast,其可以实现在一个方向上做隐式转换,另一个方向上做静态转换,可以适用于单隐和双隐两种情况 //首先是双隐,也就是两边都能直接进行隐式转换,一般适用于基本数据类型,如 int a = 4; double b = 3.2; a = b; b = a; cout << a << endl; cout << b << endl; a = static_cast<int> (b); b = static_cast<double> (a); //然后是单隐,也就是说,只能从一遍到另一边进行隐式转换 //任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针 void* p = &b; int* q = &a; p = q; q = static_cast<int*>(p);1.2 reinterpret_cast
reinterpret_cast“通常为操作数的位模式提供较底层的重新解释”-->也就是说将数据以二进制的形式重新解释,在双方向上都不可以隐式类型转换的,则需要重新类型转换。可以实现双不隐的情况,如int转指针,指针转int等。
//双不隐 int *m=&a; int n=4; m = reinterpret_cast<int*>(n); n = reinterpret_cast<int>(m);1.3 const_cast
Const_cast可用来移除非const对象的引用或指针的常量性。其可以将const变量转换为非const变量。其可以用于去除指针和引用的const,const_cast是对const的语义补充。其目标类型只能是引用或指针。
非const对象 --> const引用或指针 --> 脱const --> 修改非const对象
//const_cast-->用于去除非const对象的const,用于指针和引用 /************ 第一种情况,去引用的const化 ************/ int aa; const int& ra = aa; aa = 100; cout << aa << endl; cout << ra << endl; //ra = 200;//这样是错误的,因为ra是const,要实现ra的修改,必须去const化 const_cast<int&> (ra) = 300; cout << aa << endl; cout << ra << endl; /************ 第二种情况,去指针的const化 ************/ const int* pp = &a; //*p = 200;//这样是错误的,因为指针p是const类型,要实现p的修改,必须去const化 *const_cast<int*>(pp) = 500; cout << *pp << endl;以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
xxx_cast是一个统称,它指的是static_cast(静态转换),const_cast(常量转换),reinterpert_cast(重解释转换),dyn
c++中提供了四种新的强制转换分别是:const_cast、dynamic_cast、reinterpret_cast、static_cast.这四种转换类型,
前言使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast。 const_cas
标准C++包含一个显式的转换语法:static_cast:用于“良性”和“适度良性”的转换,包括不用强制转换const_cast:用于“const”和/或“vo
众所周知C++关于类型转换引入了四种方式:static_castconst_castdynamic_castreinterpret_cast为什么要引入这几种类