在我们编程过程中经常遇到一些需要进行转换的数据操作,比如把整型转换为字符型。在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转换符也不该用在对象数据上