Casting----类型转换,也就是将数据从一种类型转换到另一种类型的 *** 作。本文首先给出两种类型转换的方式:隐式转换和显式转换,然后简单介绍一下C语言常用的类型转换方式,最后详细叙述C++中常用的三种类型转换模版:static_cast
,const_cast
,reinterpret_cast
。
隐式转换(Implict conversion):这种类型转换 *** 作是由编译器自动完成的,程序员不需要亲自 *** 作。
例如:
int iVariable = 10;float fVariable = iVariable; // 这里将一个整数赋值给一个浮点数,隐式触发类型转换
显式转换(Explicit conversion:这种类型转换需要程序员自己显式给出类型修饰。
例如:
int iVariable = 20;float fVariable = (float) iVariable / 10;
2.C++中常用三种类型转换方式static_cast
用法:static_cast<type>(Expression);
注:type是目标类型,Expression(表达式)----可以是一个变量,或者具有计算结果的表达式
例如:
int iVariable = 30;float fVariable = static_cast<float>(iVariable); // 这一语句将类型为int的变量iVariable转换为float类型的fVariable
从上面的示例代码可知,static_cast
告诉编译器尝试转换两个不同类型的变量。这个转换方式常用来转换C++语言自有类型(build-in type,例如:char,int,float,double),即使类型之间会有精度的损失。此外,static_cast
*** 作只能用在相关的指针类型之间。
例如:
int* pToInt = &iVariable;float* pTofloat = &fVariable;float* pResult = static_cast<float*>(pToInt); // error:不同类型的指针之间无法转换
const_cast
用法:const_cast<type>(Expression);
注:type是目标类型,Expression(表达式)----可以是一个变量,或者具有计算结果的表达式
例如:
voID aFunction(int* a){ cout << *a << endl;}int main(){ int a = 10; const int* iVariable = &a; aFunction(const_cast<int*>(iVariable)); // 因为函数aFunction中参数没有指定为const int*类型,那么就需要将const int*类型的变量显式的转换为非const类型 return 0;}
const_cast
可能是使用做少的类型转换 *** 作,因为它不可以在不同类型之间进行转换。它仅仅是将一个const修饰的类型变量转化为非const修饰的类型变量。一般而言,我们很少使用到这个 *** 作。
reinterpret_cast
用法:reinterpret_cast<type>(Expression);
注:type是目标类型,Expression(表达式)----可以是一个变量,或者具有计算结果的表达式
目前来说,这是最强大的类型转换 *** 作。reinterpret_cast
实现在任意类型之间进行显式转换,也包括指针类型转换成任意其他指针类型。但是,它不能完成const_cast
*** 作的功能。
以上是内存溢出为你收集整理的详述C++casting *** 作全部内容,希望文章能够帮你解决详述C++casting *** 作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)