c++中4个与类型转换相关的关键字分析

static_cast

reinterpret_cast

dynamic_cast

const_cast

1.static_cast------运算符完成相关类型之间的转换

使用场景:如在同一类层次结构中的一个指针类型到另一个指针类型,整型到枚举类型,或者浮点型到整型等。

例: 1, int m=10;

double n=static_cast < int > m;

2, int * q=static_cast < int* >(malloc(100));

2.reinterpret_cast------处理互不相关类型之间的转换

使用场景:如从整型到指针,一种类型的指针到另一种类型的指针等

例: int a=10;

double* b=reinterpret_cast(a);//b的转换结果为0x0000000a

3.*dynamic_cast------处理基类型到派生类型的转换*****(这个说法不是很准确,为了好理解先这么写)

使用场景:基类必须有虚函数,即为多态时,可以转换

例:

class Base

{

public:

   virtual int test(){return 0;} //基类中存在虚函数,故在派生类中存在虚函数指针指向虚函数表。

};

class Derived:public Base

{

public:

   virtual int test(){return 1;}

};

int main()

{

Base cbase;

Derived cderived;

Base *p1=new Base;

Base *p2=new Derived;

Derived* pD1=dynamic_cast<Derived*>(p1);//p1没有真正指向派生类,pD1置为0

Derived* pD2=dynamic_cast<Derived*>(p2); //正确

//Derived& pd1=dynamic_cast<Derived&>(*p1);//p1没有真正指向派生类,pd1抛出异常

Derived& pd2=dynamic_cast<Derived&>(*p2);//正确

return 0;

}

4,const_cast用来移除变量的const或volatile限定符。

一句话:强制去掉const(或volatile) 必须使用const_cast 。
注:volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下代码:a=1;a=2;a=3;a=4;对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有a=4(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码).原文链接: https://www.cnblogs.com/junlinfeizixiao/p/6193412.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/246075

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午1:16
下一篇 2023年2月14日 上午1:16

相关推荐