C++类型转换运算符介绍

文章目录

  • 前言
  • 一、static_cast
  • 二、dynamic_cast
  • 三、const_cast
  • 四、reinterpret_cast
  • 总结


前言

C ++四个用于类型转换的运算符。它们被称为类型转换运算符。他们是:

static_cast :静态类型转换
dynamic_cast :动态转换
const_cast :常量转换
reinterpret_cast :重新释义转换

从单词语义上可以知道 cast转换,所以功能就如每一个转义字符一样,下面是每一个 具体介绍。


一、static_cast

所谓的静态,即在编译期内即可决定其类型的转换,用的也是最多的一种。
注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。
使用方式:static_cast<目标类型>(标识符)

char a = 'a';
int b = static_cast<char>(a);//正确,将char型数据转换成int型数据
double *c = new double;
void *d = static_cast<void*>(c);//正确,将double指针转换成void指针
int e = 10;
const int f = static_cast<const int>(e);//正确,将int型数据转换成const int型数据
const int g = 20;
int *h = static_cast<int*>(&g);//编译错误,static_cast不能转换掉g的const属性

二、dynamic_cast

用于多态中父子类之间的多态转换
使用方式:dynamic_cast<目标类型>(标识符)

三、const_cast

主要是去掉const属性,但要注意目标类型只能是指针或者引用
使用方式:const_cast<目标类型>(标识符)

四、reinterpret_cast

数据的二进制重新解释,但是不改变其值。
使用方式:reinterpret_cast<目标类型>(标识符)
比如讲char转换为uchar

char  char1[] = {0x99,0x88,0x12,0x00};
uchar * char2 = reinterpret_cast<uchar*> char1;

总结

新式转换较旧式转换更受欢迎。新式转型较易辨别,能简化“找出类型系统在哪个地方被破坏”的过程;二是各转型动作的目标愈窄化,编译器愈能诊断出错误的运用。
尽量少使用转型操作,尤其是dynamic_cast,耗时较高,会导致性能的下降,尽量使用其他方法替代。

你可能感兴趣的:(C++,c++,类型转换)