• c++类型转换 GIS


    const_cast最普通的用途就是转换掉对象的 const 属性。

    class Widget { ... };
    class SpecialWidget: public Widget { ... };
    void update(SpecialWidget *psw);
    SpecialWidget sw; // sw 是一个非 const 对象。
    const SpecialWidget& csw = sw; // csw 是 sw的一个引用  它是一个 const 对象
    update(&csw); // 错误!不能传递一个 const SpecialWidget* 变量  给一个处理 SpecialWidget*类型变量的函数
    update(const_cast<SpecialWidget*>(&csw)); // 正确,csw的 const被显示地转换掉(  csw 和 sw 两个变量值在 update 函数中能被更新)

    Widget *pw = new SpecialWidget;
    update(pw); // 错误!pw的类型是 Widget*,但是

    update(const_cast<SpecialWidget*>(pw)); // 错误!const_cast仅能被用在影响 // constness or volatileness 的地方上。// 不能用在向继承子类进行类型转换。

    你能用 dynamic_cast把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时) :

    它不能被用于缺乏虚函数的类型上(参见条款 M24) ,也不能用它来转换掉 constness:

    Widget *pw;
    ...
    update(dynamic_cast<SpecialWidget*>(pw)); // 正确,传递给 update函数一个指针

    如你想在没有继承关系的类型中进行转换,你可能想到 static_cast。如果是为了去除const,你总得用 const_cast。

    int firstNumber, secondNumber; 

    double result = static_cast<double>(firstNumber)/secondNumber; 

    reinterpret_casts的最普通的用途就是在函数指针类型之间进行转换。

    typedef void (*FuncPtr)(); // FuncPtr is 一个指向函数  的指针,该函数没有参数  返回值类型为 void
    FuncPtr funcPtrArray[10]; // funcPtrArray 是一个能容纳  10 个 FuncPtrs 指针的数组

    让我们假设你希望(因为某些莫名其妙的原因)把一个指向下面函数的指针存入funcPtrArray数组:

    int doSomething(); 

    你不能不经过类型转换而直接去做,因为 doSomething 函数对于 funcPtrArray 数组来说有一个错误的类型。在 FuncPtrArray 数组里的函数返回值是 void 类型,而doSomething
    函数返回值是 int 类型。
    funcPtrArray[0] = &doSomething; // 错误!
    funcPtrArray[0] = reinterpret_cast<FuncPtr>(&doSomething);// reinterpret_cast可以让你迫使编译器以你的方法去看待它们:

  • 相关阅读:
    cygwin配合NDK开发Android程序
    和菜鸟一起学c之函数指针
    和菜鸟一起学android4.0.3源码之SD卡U盘等自动挂载配置
    Android系统的开机画面显示过程分析
    android编译系统的makefile文件Android.mk写法
    Linux下makefile教程
    和菜鸟一起学linux之本地git中心仓库建立
    强人总结的Windows XP实用技巧45条(一)
    Webshell下自动挂马的ASP
    多进程Telnet的木马例子
  • 原文地址:https://www.cnblogs.com/gisbeginner/p/2747612.html
Copyright © 2020-2023  润新知