C++转型操作符

来源:互联网 发布:网络名称大全 编辑:程序博客网 时间:2024/04/30 20:50

解释四个新型操作符的用途:

static_cast: 基本与拥有与C旧式转型相同的威力与意义,以及相同的限制。如:

//计算两个int型数相除,结果为double型int firstNum, secondNum;double res = (double)firstNum / secondNum;                //旧式C语法double res = static_cast<double>(firstNum) / secondNum;   //新式C++转型符

const_cast: 用来改变表达式中的常量性(constness)或易变性(volatileness)。如:

int num;const int *cpNum = #int *pNum = cpNum;            //error:cannot convert from 'const int *' to 'int *'int *pNum = (int *)cpNum;                 //旧式Cint *pNum = const_cast<int *>(cpNum);     //新式C++ const_cast移除常量性

dynamic_cast: 用来执行继承体系中“安全的向下转型或跨系转型动作”。如:

//可以利用dynamic_cast将“指向base class object 的pointer或reference”转型为“指向derived class object的pointer或reference”//如果转型失败,会以一个null指针或一个exception 表现出来class CBase {     };                        //基类class CDerived: public CBase  {     };      //继承类CDerived dc;CDerived *dp = &dc;CBase *bp = dynamic_cast<CBase *>(dp);      //使用dynamic_cast将指向继承类的指针转化为指向基类的指针 CBase &br = dynamic_cast<CBase &>(dc);      //使用dynamic_cast将指向继承类的引用转化为指向基类的引用

reinterpret_cast: 最常用的用途是转换"函数指针"类型。如:

typedef void (*funcPtr)();    //funcPtr是个无参数返回值为void型的函数指针类型int iFunc(){return 0;}        //iFunc为一个无参数返回值为int型的函数void func(funcPtr f){}        //func函数的参数是一个类型为funcPtr类型的函数指针main(){    func(iFunc());        //error:cannot convert parameter 1 from 'int' to 'void (__cdecl *)(void)'    func(reinterpre_cast<funcPtr>(iFunc);     //right! reinterpre_cast将返回值为int 的函数转化为 返回值为void 的函数}


0 0
原创粉丝点击