标签:类型转换 const 函数 reinterpret int dynamic C++ cast
C++类型转换
static_cast
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast
example:
int j=10;
double value=static_cast<double>(j)/2;
void *p =&d;
//必须确保d是double类型,否则类型不符合,会产生未定义的结果
double *dp=static_cast<double *>(p);
const_cast
const_cast只能改变运算对象的底层const,即将常量对象转换成非常量对象。去掉const性质
const_cast常常用于函数重载种,如一个函数是常函数,一个是普通函数,则可以直接复用一份代码
注:如果对象是常量,再使用const_cast执行操作就会产生未定义的行为
const volatile int ci = 100;
int* pci = const_cast<int*>(&ci);
reinterpret_cast
reinterpret_cast通常为运算对象的位模式提供较低层次上的重新解释
int *ip;
char *pc = reinterpret_cast<char *>(ip); //编译器不会报错
string str(pc);//可能在运行时发生错误,pc所值的真实对象是一个int而非字符
使用reinterpret_cast非常危险,一般不建议使用
dynamic_cast
dynamic_cast用于将基类的指针或引用安全的转换成派生类的指针或引用
使用场景:
想使用基类的指针或者引用执行子类的某个函数并且该函数不是虚函数(一般情况,我们应该尽量使用虚函数)
当基类指针指向子类对象时,dynamic_cast是安全的并且可以执行转换,否则会执行失败或则抛出异常
//A是基类,B是子类
B b;
A* pa = &b;
B* pb = dynamic_cast<B*>(pa);
标签:类型转换,const,函数,reinterpret,int,dynamic,C++,cast 来源: https://www.cnblogs.com/LuckCoder/p/15056458.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。