zoukankan      html  css  js  c++  java
  • 关于C++中的类型转换

    C++中定义了四种类型转换操作符:static_cast、const_cast、dynamic_cast和reinterpret_cast。

    static_cast的用法类似于C语言中的强制类型转换,它可以将一种类型转换为另一种类型:

    double n;
    int a=static_cast<int>(n);
    

    const_cast用于去除变量的常量属性,将一个const变量转变为非const变量:

    const int a=0;
    int b=const_cast<int>(a);
    

    dynamic_cast则用于“将指向base class objects的pointers或references转型为指向derived class objects的pointers或references,并得知转型是否成功。”如果转型失败,会以一个null指针(当转型对象是指针)或一个exception(当转型对象是reference)表现出来。

    Widget *pw;
    update(dynamic_cast<SpecialWidget*>(pw));
    
    void updateViaRef(SpecialWidget& rsw);
    updateViaRef(dynamic_cast<SpecialWidget&>(*pw));
    

    reinterpret_cast操作符的转换结果与编译平台息息相关,该操作符不具备移植性。它可以用来转换指针类型:

    typedef void (*myFun)(int);
    void fun1(int a)
    {
    	std::cout<<a<<std::endl;
    }
    int fun2(int a,int c)
    {
    	std::cout<<c<<std::endl;
    	return a;
    }
    int main()
    {
    	void(*fun)(int);
    	fun=reinterpret_cast<myFun>(fun2);
    	fun(5);
    	system("pause");
    	return 0;
    }
    

    由于该操作符不具备移植性,某些情况下这样的转型可能会导致不正确的结果,因此不到万不得已,应该尽量避免函数指针转型。

  • 相关阅读:
    docker容器跑tomcat遇到的坑
    PCL 编程多个点云合成
    PCL 常用小知识
    PCL点云库中的坐标系(CoordinateSystem)
    Ubuntu14.04(64位)下gcc-linaro-arm-linux-gnueabihf交叉编译环境搭建
    Windows cmd 快捷操作
    #Pragma Pack与内存分配
    线段上的整数点个数
    基于PCL绘制模型并渲染
    rosbag数据记录及转换图片、视频
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/5629294.html
Copyright © 2011-2022 走看看