C++四种强制类型转换解析
- C++的四种强制类型转换主要是
static_cast<>
,const_cast<>
,reinterpret_cast
,dynamic_cast<>
- 接下来依次介绍一下四种强制转换的类型和用途
1.static_cast<>
示例代码:
class AA
{public:AA(){cout << "AA" << endl;}void show(){cout << "demo show!" << endl;}
};class BB:public AA
{public:BB(){cout << "BB" << endl;}void mms(){cout << "mms" << endl;}
};// static_cast类型转换
// 父类子类 指针转换。
// 子类转父类:安全
int static_cast_change(double d_num)
{BB mm;AA ffs;auto ss =static_cast<AA>(mm);ss.show();//cout << "地址:" << << endl;return static_cast<int>(d_num);
}int main()
{double mm = 3.66;int ff = static_cast_change(mm);std::cout << ff << endl;system("pause");return 0;
}
运行结果:
结论:
- 1.可以实现正常的int转double类型转换
- 2.可以实现从子类转成基类的类型转换:其中基类转子类不行:(因为基类转子类没有动态类型检查 不安全)
- 3.
static_cast
无法转换const
,violate
,unsigned
等属性 - 4.可以将空指针转成目标类型的空指针
2.const_cast<>
- const_cast<>可以实现将const 指针类型转普通指针
// CPPConvert.cpp : 定义控制台应用程序的入口点。
// C++ 类型转换的四种方式#include "stdafx.h"
#include <iostream>
using namespace std;class AA
{public:AA(){cout << "AA" << endl;}void show(){cout << "demo show!" << endl;}
};class BB:public AA
{public:BB(){cout << "BB" << endl;}void mms(){cout << "mms" << endl;}
};// static_cast类型转换
// 父类子类 指针转换。
// 子类转父类:安全
int static_cast_change(double d_num)
{BB mm;AA ffs;auto ss =static_cast<AA>(mm);ss.show();//cout << "地址:" << << endl;int a = 11;// void *mmw ;// int * ssa = static_cast<int *>(mmw); return static_cast<int>(d_num);
}int* const_cast_change(const int * mm)
{return const_cast<int *>(mm);
}int main()
{double mm = 3.66;int ff = static_cast_change(mm);std::cout << ff << endl;const int * mms = &ff;int * ffa = const_cast_change(mms);cout << *ffa << endl;cout << "地址:" << ffa<< endl;system("pause");return 0;
}
运行截图:
3.reinterpret_cast<>
- 实现指针转整形,整形转指针
// CPPConvert.cpp : 定义控制台应用程序的入口点。
// C++ 类型转换的四种方式#include "stdafx.h"
#include <iostream>
using namespace std;class AA
{public:AA(){cout << "AA" << endl;}void show(){cout << "demo show!" << endl;}
};class BB:public AA
{public:BB(){cout << "BB" << endl;}void mms(){cout << "mms" << endl;}
};// static_cast类型转换
// 父类子类 指针转换。
// 子类转父类:安全
int static_cast_change(double d_num)
{BB mm;AA ffs;auto ss =static_cast<AA>(mm);ss.show();//cout << "地址:" << << endl;int a = 11;// void *mmw ;// int * ssa = static_cast<int *>(mmw); return static_cast<int>(d_num);
}int* const_cast_change(const int * mm)
{return const_cast<int *>(mm);
}int reinterpret_cast_change(int * mm)
{int smm = 2344;cout << reinterpret_cast<int*>(smm) << endl;return reinterpret_cast<int>(mm);
}int main()
{int aa = 33;cout <<reinterpret_cast_change(&aa)<< endl;system("pause");return 0;
}
- 运行截图:
4.dynamic_cast<>
- 不能用于内置的基本转换!!!!!
- 其他是编译就检查能否转换,这个是运行时候检查的
- 可以从父类转基类,但是可能为空,需要有虚函数
// CPPConvert.cpp : 定义控制台应用程序的入口点。
// C++ 类型转换的四种方式#include "stdafx.h"
#include <iostream>
using namespace std;class AA
{public:AA(){cout << "AA" << endl;}virtual void show(){cout << "demo show!" << endl;}
};class BB:public AA
{public:BB(){cout << "BB" << endl;}void mms(){cout << "mms" << endl;}void show(){cout << "qqq" << endl;}
};// static_cast类型转换
// 父类子类 指针转换。
// 子类转父类:安全
int static_cast_change(double d_num)
{BB mm;AA ffs;auto ss =static_cast<AA>(mm);ss.show();//cout << "地址:" << << endl;int a = 11;// void *mmw ;// int * ssa = static_cast<int *>(mmw); return static_cast<int>(d_num);
}int* const_cast_change(const int * mm)
{return const_cast<int *>(mm);
}int reinterpret_cast_change(int * mm)
{int smm = 2344;cout << reinterpret_cast<int*>(smm) << endl;return reinterpret_cast<int>(mm);
}int main()
{AA * AASD = new BB();auto dd =dynamic_cast<BB*>(AASD);cout << dd << endl;system("pause");return 0;
}
运行结果:
相关区别
- 1.dynamic_cast<>有基类转子类的类型检查,比static_cast要安全的多,但是基类当中必须要有虚函数,这样才能识别,dynamic_cast是在程序运行时候检查的 ,而其他三种 是编译时候就检查的。
C++四种强制类型转换解析相关推荐
- C++中的向上类型转换和向下类型转换+四种强制类型转换
转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分 ...
- C++的四种强制类型转换
C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 为什么使用C风格的强制 ...
- C++四种强制类型转换
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C++四种强制类型转换 一.static_cast 二.dynamic_cast 三.const_cast 四.reinterpret ...
- 逐梦C++之四:四种强制类型转换
1.总括四种强制类型转换 static_cast const_cast dynamic_cast reinterpret_cast 2.static_cast static_cast是最常用的强制类型 ...
- C++ :四种强制类型转换
文章目录 一.四种类型转换 1. static_cast<>() 2. const_cast<>() 3. reinterpret_cast<>() 4. dyna ...
- C++ 四种强制类型转换
C++ 类型转换(C风格的强制转换): 在C++基本的数据类型中,可以分为四类:整型,浮点型,字符型,布尔型.其中数值型包括 整型与浮点型:字符型即为char. (1)将浮点型数据赋值给整型变量时,舍 ...
- C++ 类型转换 :C语言的类型转换、C++的四种强制类型转换、explicit
文章目录 C语言中的类型转换 隐式类型转换 显式类型转换 C++ 强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast explici ...
- C语言隐式/显式类型转换 | C++四种强制类型转换、类的隐式转换、explicit
文章目录 C语言类型转换 隐式类型转换 显式类型转换 C++ 强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast 类的隐式类型转换 ...
- C++中四种强制类型转换的区别
使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast和const_cast. 1.static_cast 用法:static_cast ...
最新文章
- (1 24) 3 java代码_算24点 java代码
- python文件数据总和计算_python 计算文件夹里所有内容的大小总和
- 如何制作计算机启动盘,一款U盘启动盘制作小工具
- c++中 结构体和类的区别
- kafka 怎么样连接图形化界面_从零开始搭建Kafka+SpringBoot分布式消息系统
- 开源:Taurus.MVC 框架 (已支持.NET Core)
- 用Node操作Firebird。
- 推理游戏---个人解答
- 使用redis中的watch解决秒杀系统中抢购问题
- 统信(UOS)虚拟机网络设置
- 极限编程-拥抱变化阅读感想(一)
- 倪光南院士 你该检讨一下了
- OneNET物联网平台介绍
- layui 利用tab选项卡实现:上一步,下一步操作
- mac电脑macOS常用软件必备软件命令行安装,史上最全mac插件2
- vue 饼图 右侧 lengend 数据 自己渲染
- android zuk彩蛋,联想ZUK Z2你真的会玩吗?来看U-Touch 2.0的那些小彩蛋
- 电子信息技术专业名词中英文对照(一)
- 台湾--护照正则表达式
- TS学习(八) :TS中的类
热门文章
- 校招生大规模涨薪、再扩招10000人?大厂抢人有多野?
- 「CJOJ2573」Snake vs Block
- 软件测试人员必备的linux命令
- php面试题汇总一(基础篇附答案)
- CodeFirst Update-Database 出现对象'DF__**__**__**' 依赖于 列'**'。
- mac: brew的删除
- java用volatile或AtomicBoolean实现高效并发处理 (只初始化一次的功能要求)
- 杭电1710 (已知二叉树前中序 求后序)
- 配置网站之后500.19错误
- Android画布和图形绘制---Canvas and Drawables(一)