C语言原来有简单的语法实现强制类型转换,为什么C++还要确定新特性实现强制类型转换呢?归根到底是因为C语言强制类型转换有以下三个缺点。
1,没有从形式上体现转换功能和风险的不同。
例如,将int强制转换成double是没有风险的,而将常量指针转换成非常量指针,将基类指针转换成派生类指针都是高风险的,而且后两者带来的风险不同(即可能引发不同种类的错误) , C语言的强制类型转换形式对这些不同并不加以区分。
2,将多态基类指针转换成派生类指针时不检查安全性,即无法判断转换后的指针是否确实指向一个派生类对象。
3,难以在程序中寻找到底什么地方进行了强制类型转换。——强制类型转换可能是引发程序运行时错误的一个原因,因此在程序出错时,可能就会想到是不是有哪些强制类型转换出了问题。举个例子
int n=1;
int *p=(int*)n;
*p=9;//运行时才出现错误,因为地址为1的内存不能使用(一般是操作系统占用的)
1,const_cast
const_cast用于去除指针,引用,this指针的const属性。
//1,指针类型
const int n=5;
int n1=const_cast<
本文详细介绍了C++中的四种类型转换:const_cast用于移除const属性,static_cast适用于低风险转换,如基类到派生类转换,dynamic_cast支持具有虚函数的基类与派生类间的安全转换,而reinterpret_cast则类似C语言的强制转换,具有潜在风险。
最低0.47元/天 解锁文章
更安全的强制类型转换&spm=1001.2101.3001.5002&articleId=122695483&d=1&t=3&u=7c42309c4cea40938ea3a4b6f3bc606e)
1188

被折叠的 条评论
为什么被折叠?



