• 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++四种强制类型转换解析相关推荐

  1. C++中的向上类型转换和向下类型转换+四种强制类型转换

    转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分 ...

  2. C++的四种强制类型转换

    C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 为什么使用C风格的强制 ...

  3. C++四种强制类型转换

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C++四种强制类型转换 一.static_cast 二.dynamic_cast 三.const_cast 四.reinterpret ...

  4. 逐梦C++之四:四种强制类型转换

    1.总括四种强制类型转换 static_cast const_cast dynamic_cast reinterpret_cast 2.static_cast static_cast是最常用的强制类型 ...

  5. C++ :四种强制类型转换

    文章目录 一.四种类型转换 1. static_cast<>() 2. const_cast<>() 3. reinterpret_cast<>() 4. dyna ...

  6. C++ 四种强制类型转换

    C++ 类型转换(C风格的强制转换): 在C++基本的数据类型中,可以分为四类:整型,浮点型,字符型,布尔型.其中数值型包括 整型与浮点型:字符型即为char. (1)将浮点型数据赋值给整型变量时,舍 ...

  7. C++ 类型转换 :C语言的类型转换、C++的四种强制类型转换、explicit

    文章目录 C语言中的类型转换 隐式类型转换 显式类型转换 C++ 强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast explici ...

  8. C语言隐式/显式类型转换 | C++四种强制类型转换、类的隐式转换、explicit

    文章目录 C语言类型转换 隐式类型转换 显式类型转换 C++ 强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast 类的隐式类型转换 ...

  9. C++中四种强制类型转换的区别

    使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast和const_cast. 1.static_cast     用法:static_cast ...

最新文章

  1. (1 24) 3 java代码_算24点 java代码
  2. python文件数据总和计算_python 计算文件夹里所有内容的大小总和
  3. 如何制作计算机启动盘,一款U盘启动盘制作小工具
  4. c++中 结构体和类的区别
  5. kafka 怎么样连接图形化界面_从零开始搭建Kafka+SpringBoot分布式消息系统
  6. 开源:Taurus.MVC 框架 (已支持.NET Core)
  7. 用Node操作Firebird。
  8. 推理游戏---个人解答
  9. 使用redis中的watch解决秒杀系统中抢购问题
  10. 统信(UOS)虚拟机网络设置
  11. 极限编程-拥抱变化阅读感想(一)
  12. 倪光南院士 你该检讨一下了
  13. OneNET物联网平台介绍
  14. layui 利用tab选项卡实现:上一步,下一步操作
  15. mac电脑macOS常用软件必备软件命令行安装,史上最全mac插件2
  16. vue 饼图 右侧 lengend 数据 自己渲染
  17. android zuk彩蛋,联想ZUK Z2你真的会玩吗?来看U-Touch 2.0的那些小彩蛋
  18. 电子信息技术专业名词中英文对照(一)
  19. 台湾--护照正则表达式
  20. TS学习(八) :TS中的类

热门文章

  1. 校招生大规模涨薪、再扩招10000人?大厂抢人有多野?
  2. 「CJOJ2573」Snake vs Block
  3. 软件测试人员必备的linux命令
  4. php面试题汇总一(基础篇附答案)
  5. CodeFirst Update-Database 出现对象'DF__**__**__**' 依赖于 列'**'。
  6. mac: brew的删除
  7. java用volatile或AtomicBoolean实现高效并发处理 (只初始化一次的功能要求)
  8. 杭电1710 (已知二叉树前中序 求后序)
  9. 配置网站之后500.19错误
  10. Android画布和图形绘制---Canvas and Drawables(一)