zoukankan      html  css  js  c++  java
  • C++:强制转换

    C++中 , 除了可以使用C风格的强制转换外 , 还另外定义了 四个用于强制转换的关键字

    dynamic_cast     static_cast      const_cast    reinterpret_cast   (注:reinterpret : 重新解释

    dynamic_cast  用于运行时识别 指针或 引用指向的对象

    static_cast 类似于C中的强制类型转换  , 可以将较大的 算数类型赋值给较小的算数类型  , 也可以用于 编译器不提供自动转换时 类型的强制转换

      (隐式转换就是使用static_cast 实现的)

    const_cast 添加或删除  类型的 const 属性

    例:

    1     char    a[] = {"hahahahahahahha"};
    2     const char    *p = a;
    3     char    *cp;    
    4     cp = p;
    5     *cp = 'n';
    6     cout<<cp<<endl;
    //当不用转换直接 将 const char* 转换为 char* 时
    //会报错 : error C2440: '=' : cannot convert from 'const char *' to 'char *'
    1     char    a[] = {"hahahahahahahha"};
    2     const char    *p = a;
    3     char    *cp;    
    4     cp = const_cast<char*>(p);
    5     cp = p;
    6     *cp = 'n';
    7     cout<<cp<<endl;
    //转换以后, 删除了 const 属性 , 就可以修改了

    要注意,此处使用  C风格的强制类型转换时行不通的  , 照样会报错 : cannot convert from 'const char *' to 'char *'

    也可以通过  const_cast<const char*> 来添加const属性

    另外要注意的是 , const_cast 只能用于 添加或删除 const 属性  ,  用于其它任何地方都是错误的  添加或删除const属性的操作也只能用const_cast进行

    reinterpret_cast  用于对变量类型的重新解释  功能基本等同于  C  风格的强制类型转换

  • 相关阅读:
    webservice理解
    什么是xmlschema
    web项目中的跨域问题解决方法
    浏览器的同源策略和跨域问题
    java中Scanner和random的用法
    mybatis的批量删除
    java中的异常理解
    事务回滚
    做人做事2个字:心、眼
    Linux下找不到so文件的解决办法
  • 原文地址:https://www.cnblogs.com/wowk/p/3127037.html
Copyright © 2011-2022 走看看