• 详述C++casting操作


    Casting----类型转换,也就是将数据从一种类型转换到另一种类型的操作。本文首先给出两种类型转换的方式:隐式转换显式转换,然后简单介绍一下C语言常用的类型转换方式,最后详细叙述C++中常用的三种类型转换模版:static_cast,const_cast,reinterpret_cast

    1.隐式转换和现实转换

    隐式转换(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操作的功能。

  • 相关阅读:
    asp.net2.0中读取web.config数据库连接字符串2种方法
    C#中ArrayList类的使用方法
    Parameters.AddWithValue(“@参数”,value)方法
    cookie 和session 的区别详解 (出处:http://shiyangxt.cnblogs.com )
    Button与Submit调用前台与后台代码的方法
    SqlDataReader和DataSet的选择
    Session和Cookie的使用总结
    webconfig文件详解
    C# sqlDataReader区别Dataset
    SqlDataAdapter.Update()方法与SqlCommandBuilder
  • 原文地址:https://www.cnblogs.com/zjz-819823900/p/14328322.html
Copyright © 2020-2023  润新知