侧边栏壁纸
博主头像
Into The Abyss 博主等级

My Life is a Death Race

  • 累计撰写 34 篇文章
  • 累计创建 7 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

c++_study_03

Administrator
2023-10-16 / 0 评论 / 0 点赞 / 179 阅读 / 0 字

类型转换

隐式类型转换

系统自动转换,不需要程序开发人员介入

显式类型转换(强制类型转换)

c语言风格int k = 5 % (int)3.2或者int k = 5 % int(3.2)

c强制类型转换分为4种,c语言风格依然可以在c代码中使用,尽量使用c++风格强制类型转换,有更丰富的含义和功能,更好的类型检查机制,方便代码的书写和维护

static_cast

dynamic_cast

const_cast

reinterpret_cast

通用形式:强值类型转换名<type>(expression),type为转换的目标类型,expression为要转换的值。

static_cast

静态转换,可以理解为正常转换,编译的时候就会进行类型转换的检查,代码中要保证转换的安全性和正确性,跟c语言风格强制类型转换类似。

可用于

a)相关类型转换,比如整形和实型之间的转换

double f = 100.34;
int i = (int)f;
int i1 = static_cast<int>(f);

b)子类转换成父类(继承关系)

class A {};
class B : public a{};
B b;
A a = static_cast<A>(b);
B b = static_cast<B>(a); //不可以,父类不能转子类

c)void *与其他类型的指针之间的转换

int i = 10;
int *p = &i;
void *q = static_cast<void *>(p);
int *db = static_cast<int *>(q);

不可用于

a)一般不能用于指针类型之间的转换,比如int *double *,float *double *等等

dynamic_cast

主要应用于运行时类型识别和检查,主要用于父类型和子类型之间转换

const_cast

去除指针或引用的const属性,能将const属性去除,编译时就会进行类型转换,const_cast意味着缺陷

const a = 90;
int a1 = const_cast<int>(a);  //错误,a不是指针也不是引用,所以不能转
const int *pa = &a;
int *pa1 = const_cast<int *>(pa); //正确,不要有写值行为,如*pa1 = 120;

reinterpret_cast

编译时会进行的类型检查,重新解释,将操作数内容解释为另一种不同的类型,处理无关类型的转换,就等于乱转,自由转,被认为是危险的类型转换,无论怎么转,编译器都不报错。不建议使用

常用于:

1、将一个整形(地址)转换为指针,一种类型指针转换为另一种类型指针,按照转换后的内容重新解释内存中的内容。

2、也可以将一个指针类型转换为整形

0
c++

评论区