IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++风格强制类型转换: static_cast reinterpret_cast reinterpret_castconst_cast -> 正文阅读

[C++知识库]c++风格强制类型转换: static_cast reinterpret_cast reinterpret_castconst_cast

隐式类型转换

//系统自动转换
	int m = 3 + 45.6;
	double n = 3 + 45.6;

显式类型转换

也叫强制类型转换

	//c语言风格强制类型转换
	//int k = 5 % 3.2\; //语法错误
	int k = 5 % (int)3.2; //编译通过
	int k = 5 % int(3.2); //另一种写法,也OK

c++中,强制类型转换分为4中,4中类型转换用于不同的目的,C++中为了提供更好的类型检查机制, 方便代码书写和维护.

C++写法

//static_cast, dynamic_cast, const_cast, reinterpret_cast
//通用形式
//强制类型转换名<type>(express);
//强制类型转换名 : 以上四个中一种
//<type> : 转换的目标类型
//express : 你要转换的值 (你要转换的是谁)

static_cast

静态转化
可以理解为"正常转换" ,编译时候就会进行类型转换的检查, 代码中要保证转换的安全性和正确性, static_cast含义跟C语言中的强制类型转换差不多,下面是例子

	//a) 相关类型转换
	double f = 100.34f;
	int i = (int)f;  //c
	int i = static_cast<int>(f); //c++

	//b) 子类转父类, 也可以用static_cast;
	class A {};
	class B : public A {};
	B b;
	A a = static_cast<A>(b); //子类转成父类的对象, 可以
	//A a;
	//b = static_cast<B>(a);     //错误, 父类不能转子类
	//c) void* 与其他类型指针之间的转换
	int i = 10;
	int* p = &i;
	void* q = static_cast<void*>(p); //int*  转成void*
	int* db = static_cast<int*>(q);  //void* 再转成 int*

不能转的情况

//a)一般不能用于指针类型之间的转换
	double f = 100.0f;
	double* pf = &f;
	//int *i = static_cast<int *>(pf);  //不可以,编译不通过
	//float* fd = static_cast<double*>(pf);  //不可以

dynamic_cast

主要应用于运行时类型识别和检查,这里与static_cast不同的地方就是static_cast是编译时检查
主要用来父类型和子类型之间转换用
后续在类中补充…

const_cast

去除指针 或者 引用的const属性, 改转换能够将const性质转换掉
编译时进行类型转化

	const int a = 90;

	//int ai2 = const_cast<int>(a);  //a 不是指针也不是引用
	const int* pai = &a;
	int* b = const_cast<int*> (pai);  //OK
	*b = 120; //这种赋值,不要这么写,属于未定义行为, 打印出来不是120

reinterpret_cast

编译时进行类型转化
reinterpret:重新解释
将操作数内容解释为另一种不同的类型,处理无关类型转换,等于说可以乱转,很随意
一般常用语如下
1.整型(地址)转指针
按照转换后内容重新解释内存中的内容;
2.指针类型转整型

	int i = 10;
	int* p1 = &i;
	int* p2 = reinterpret_cast<int*> (&i);    //地址转指针
	char* pc = reinterpret_cast<char*>(p1);  //语法对,但不能这么用

功能强大,但是是一种危险的类型转换,随便乱转也并无意义

总结

(1)强制类型转换,不建议使用,强制类型转换能够抑制编译器报错
(2)reinterpret_cast很危险,使用const_cast意味着设计缺陷
(3)不要使用c语言风格类型转换,建议使用c++风格

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 09:54:07  更:2021-09-18 09:58:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:01:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码