前言
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);
double *c = new double;
void *d = static_cast<void*>(c);
int e = 10;
const int f = static_cast<const int>(e);
const int g = 20;
int *h = static_cast<int*>(&g);
二、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,耗时较高,会导致性能的下降,尽量使用其他方法替代。
|