一、C语言中的类型转换
int i = 1;
double d = 1.5;
double i2d = (double)i;
int d2i = (int)d
二、static_case
用途:
- 对于基本类型。static_case可以替代C语言风格的类型转换。
- 转换指针时,如果两个类之间有继承关系(不管谁A继承B还是B继承A),可成功转换。不相关的类无法相互转换。
不安全的场景:
QWidget * w = new QWidget;
QWidget * l1 = new QLabel;
QLabel * l2 = static_case<QLabel*>(w);//不安全
QLabel * l3 = static_case<QLabel*>(l1);//安全
三、dynamic_case
1、只能父子类指针之间互转。
2、结果可以是引用类型。
与 static_case 一样都可以父子类间互转,但区别在于:在父类指针转子类指针时,dynamic_case会确保完全匹配(父类指针指向之类对象且父类包含虚函数)才会成功。
四、const_case
可移除或增加指针的const属性。
移除:
int i = 10;
const int * const p = &i;
*p = 88;//报错
int * p2 = const_cast<int *>(p);
*p2 = 88;//正确
增加:
int i = 10;
int * p = &i;
const int * p1 = const_cast<const int *>(p);
const int * const p2 = const_cast<const int*>(p);
五、reinterpret_cast
1、可以转换两个互不相干的类的指针。
2、可以用于指针和整数的互转。
|