栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++中四种温和的类型转换

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++中四种温和的类型转换

C++中四种温和的类型转换
首先要了解C++基本类型转化就要了解,什么情况下用到隐式转化,什么时候用到强转。

1.任何基本类型的变量之间都可以隐式转换。
不难理解
基本类型之间的转换都会遵循(等号两边类型不一样,编译器将其右边数据类型转换成和左边类型一致)的规则。

2.任何其他类型的指针到void*都可以隐式转换。
int m_iXd;
void * m_pWp = &m_iXd

3.void*到任何其他类型的指针都必须强转。
int *m_pHf = (int *)m_pWp;
int *m_pHf = static_castm_pWp;

4.任何类型的非常指针到同类型的常指针都可以隐式转换。
const int* m_pXr = m_pHf;

5.任何类型的常指针到同类型的非常指针都必须强转。
m_pHf = (int *)m_pXr;
m_pHf = const_castm_pXr;

6.除了void*外,其他类型的指针与指针之间的转换都必须强转。
double *m_pFq;
m_pFq = (double *)m_pHf ;
m_pFq = reinterpret_castm_pHf;

##不同的场景下,用不同的转换。
static_cast<目标类型>(变量名)
第一个场景:
隐式类型转换的逆转换,能在单 一个方向隐式转换,他的反方向上就能用静态类型转换。
编译器在做转换时,首先会看想转方向的反方向可不可以隐式转换,静态转就会成功,否则就会失败。
例如1,2都可以用静态类型转换。
示例4(特殊)4实际上也是单一个方向上可以隐身转换,但是它满足了去常转换的条件,所以它使用去常转换。(术业有专攻)
第二个场景:
自定义转换,自定义转换规则,复合类型的转换编译器时不知道的所以用到静态转换。

动态类型转换
dynamic_cast<目标类型>(类型变量)
不做详细解释。

去常转换
const_cast<目标类型>(类型变量)
去除指针或者引用上的const属性。
只干一件事,常指针到非常指针的去常属性;
常引用到非常引用的去常属性。
普通类型之间的转换不能使用。

重解释转换(暴力)
reinterpret_cast<目标类型>(类型变量)
/ˌriːɪnˈtɜːprət/
任何类型的指针之间的转换或者引用之间的转换,
任意类型的指针和整数之间的转换。(态度强硬),
普通类型之间的转换不能使用。

关于C和C++中的类型转换(int*)p;和 int*§;虽然写法不一致,但是意思是一样的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号