类型转换(cast)

类型转换

1. static_cast(静态转换)

编译的时候就会进行类型转换,代码中要保证转换的安全性和正确性
可用于:

  • 相关类型转换,比如:整型和实型之间的转换
  • 子类型转成父类类型(向上转型)
  • void * 与其它类型指针之间的转换(void *:无指针类型,可以指向任何指针类型(万能指针))
double f = 100.34f;
int j = static_cast<int>(f);

class A {}
class B : public A{}
B b;
A a = static_cast<A>(b);  //  把子类转成父类的对象

//  万能指针
int i = 10;
int *p = &i;
void * q = static_cast<void *>(p);  //  int * 转成 void *
int * db = static_cast<int *>(q);

2. dynamic_cast(第三章第十节)

3. const_cast

去除指针 或者引用的 const 属性。该转换能够将 const 性能转换掉,编译时就会进行类型转换

const int a = 10;
// int b = const_cast<int *>(a); a 既不是指针,也不是引用,不能转
const int *pa = &a;
int * pa2 = const_cast<int *>(pa);  //  语法正确
*pa2 = 120;  //  这种写值行为,是属于一种未定义行为,不要这么做

4. reinterpret_cast(不建议使用)

重新解释:将操作数内容解释为另一种不同的类型【能把操作数的类型都转了】
处理无关类型的转换:也就是2个转换类型之间没有什么关系,就等于可以乱转,自由转,怎么转都行,很随意
常用于如下两种转换:

  1. 将一个整型(地址)转换成指针,一种类型指针转换成另一种类型指针,按照转换后的内容重新解释内存中的内容
  2. 也可以从一个指针类型转换成一个整型
int i = 10;
int *pi = &i;
int *p2 = reinterpret_cast<int *>(&i);
int *pc = reinterpret_cast<char *>(pi);
posted @ 2024-10-07 23:57  爱新觉罗LQ  阅读(10)  评论(0编辑  收藏  举报