static_cast < type-id > ( expression ) 将expression转换为type-id类型 但没有在运行时检查来保证转换的安全性
用法:
- #include
- using namespace std;
- class Date{
- public:
- void fun()
- {
- cout<<"Date......"<
- }
- };
- class Son:public Date{
- public:
- void fun()
- {
- cout<<"Son..........."<
- }
- };
- int main()
- {
- char a='A';
- int b=static_cast<int>(a);//基本数据类型转换
- cout<
-
- //将空指针转换成目标类型
- void *p=static_cast<void*>(&a);
- int *pd=static_cast<int*>(p);
- cout<<*pd<
-
- //父类的指针和引用
- Date* parent=static_cast
(new Son);//向上转换 - Son*child=static_cast
(new Date);//向下转换 不安全 (调用属于Son类而不是Date类的函数可能会导致访问冲突。) - 为什么不安全?
- 用Son访问子类有父类没有的成员,就会出现访问越界的错误
- return 0;
- }
2.dynamic_cast关键字(运行时类型检查)
dynamic_cast主要用于类层次结构中父类和子类之间指针和引用的转换,由于具有运行时类型检查,
因此可以保证下行转换的安全性,何为安全性?
即转换成功就返回转换后的正确类型指针,如果转换失败,则返回NULL,之所以说static_cast在下行转换时不安全,是因为即使转换失败,它也不返回NULL。
上行转换同样

3.const_cast < type-id > ( expression )
const_cast运算符可用于从类中删除const、volatile和__unaligned属性。
- 常量指针被转化成非常量指针,并且仍然指向原来的对象;
- 常量引用被转换成非常量引用,并且仍然指向原来的对象;
- 常量对象被转换成非常量对象。
- #include
- using namespace std;
- class B{
- public:
- int a=10;
- };
- int main()
- {
- const B ob;
- //ob.a=20;//会报错 因为ob为常对象 内容不能被修改
-
-
相关阅读:
在旭日X3派开发板上使用USB Wifi来提高网络速度
猿创征文|十 BLE协议之L2CAP
二、鼎捷T100之MDS(Master Demand Schedule)计算
【校招VIP】java语言考点之垃圾回收算法
WPF的路由事件
算法:(八)树
Elasticsearch查询
SpringMVC源码分析(四)请求流程分析
把Android手机变成电脑摄像头
C++高频面试题总结
-
原文地址:https://blog.csdn.net/weixin_58389786/article/details/126419778