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  风格的强制类型转换

  • 相关阅读:
    bzoj2004(矩阵快速幂,状压DP)
    bzoj1242(弦图判定)
    uva1659(最大费用循环流)
    bzoj1009
    bzoj2893(费用流)
    bzoj4873(最大权闭合子图)
    bzoj2879(动态加边费用流)
    51nod 1239 欧拉筛模板
    poj2774 sa模版
    洛谷3391文艺平衡树
  • 原文地址:https://www.cnblogs.com/wowk/p/3127037.html
Copyright © 2011-2022 走看看