C++强制类型转换

本文介绍了C++中四种类型的强制转换:const_cast用于移除常量限定符,static_cast适用于静态类型转换,reinterpret_cast用于任意类型间的转换,dynamic_cast主要用于多态下的安全转换。重点分析了const_cast的使用场景和注意事项,包括对const变量的非安全转换及其可能导致的未定义行为。
摘要由CSDN通过智能技术生成

在我们编程过程中经常遇到一些需要进行转换的数据操作,比如把整型转换为字符型。在C语言中我们进场这么做,转换也分隐式和显示转换。下面我们从C语言出发,通过代码来看看类型转换:

#include<stdio.h>
{
    int a = 65;
    int b = 70;
    char ch = (char)a;//强制显示转换
    printf("%d , %f, %c",a,b,c);//这里存在一个隐式转换那就是这里的b,从整型转换为浮点型
    return 0;//习惯性的加上还是比较完美的0.0
}

为了在我们学的C++中更能自如的使用多态,不免我们就要遇到类型的转换问题,在这里我们主要针对C++的类型转换来进行分析,在C++中为了实现类型之间的相互赋值操作,专门设有四个函数来做这个工作,分别是:

const_cast <new_type> (expression)//去常性
static_cast <new_type> (expression)//静态转换,就是类型相关的转换,(隐式 );int转flaot,double转int等等。
reinterpret_cast <new_type> (expression)//将一种类型转换成为另外一种类型。

dynamic_cast <new_type> (expression)//用于将一个父类对象的指针转换成为一个子类对象的指针或者引用。1.向上转型:子类对象的指针->指向父类对象的指针或者引用。2.向下转型:父类对象的指针->指向子类对象的指针和引用。

它们有着相同的结构,看起来像是模板方法。这些方法就是提供给开发者用来进行指针和引用的转换的。

1、const_cast :

const_cast转换符是用来移除变量的const或volatile限定符。先者是去除常性,因为很多时候我们不得不设定变量为常变量,防止其他操作改变他的值,对于数据也是一种保护,但我们在设定了常变量之后有时迫不得已需要在函数中修改常变量的值得时候就会需要去常性,用const_cast来去除const限定对于const变量,我们就能修改它的值,这是这个限定符最直接的表现;后者是在线程先使用的关键字,它的作用就是保证取数据从内存中取,保证取得数据是原值,意思就是在多线程中存在CPU竞争现象,如果有一个线程取了内存中的一个变量值正要操作,就被夺去CPU执行权,为了防止下次该线程执行时候取数值取得是原值而不是在被夺去CPU执行权候由于其他线程对该数据的拒不改变导致取值错误而设置的,在这里我们不做过多详细的展示和讲解。

下边的代码显然是达不到目的的:

const int constant = 10;
int modifier = constant;

因为对modifier的修改并不会影响到constant,这暗示了一点:const_cast转换符也不该用在对象数据上

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值