zoukankan      html  css  js  c++  java
  • 【C++】类型转换(学习笔记)

    1、 隐式类型转换,相关联的类型(e.g.int vs double)之间可以发生隐式类型转换。

      比如,在条件中,非布尔类型转为布尔类型;

        初始化时,初始值变为变量类型;

        赋值时,右值变成左侧的类型;

        运算过程中的类型统一;

        数组被转换成指向首元素的指针;

    2、 显式类型转换

      Cast-name<type> expression;

    int i,j;
    double s = statc_cast<double>(j)/i;

    1) static_cast 具有明确定义的类型转换,不能包含底层const;

    在把较大数据类型赋值给较小数据类型时非常有有用。(为什么呢?强制类型转换会丢失精度,由大变小不会超出范围,但是由小变大不一定)

    2) cosnt_cast 只能改变运算对象的底层const,只改变表达式const属性而不改变类型。一般是去掉const性质,使之可以改变对象的值(如果对象本身不是const的话,否则会报错)  

    const char *pc;
    char *p = const_cat<char*>(pc);   //p是一个非常量指针,与pc指向相同区域
                        //注意type与原类型一样,没有改变,只改变了const

    3) reinterpret_cast 为运算对象的位模式提供较低层次上的重新解释。(非常危险)

    4) dynamic_cast 支持运行时类型识别

    什么时候需要dynamic_cast呢?

      举个例子:基类的指针或者引用想要调用派生类的函数时,这个函数却不是虚函数,可以通过dynamic_cast进行强制将基类指针或者引用转换成派生类的指针或引用。

      Dynamic_cast<type*>e;

      Type必须是类类型,而且一般应该含有虚函数(不懂为啥)。

      e必须符合三个条件中的一个①e是type的公有派生类②e是type的公有基类③e的类型就是type

      如果转换失败,指针转换类型失败会返回0,引用类型失败抛出bad_cast异常

  • 相关阅读:
    转载:如何在 ES5 环境下实现一个const
    vue-element-admin中public中json中的代码没有打包到线上
    cordova打包vue2(webpack)android、ios app
    Cordova开发App入门之创建android项目
    vuex的理解
    Vue中的computed属性
    yarn 常用命令(基于vue框架)
    npm和yarn的使用对比
    npm常用命令
    asp.net ashx一般处理程序实现async await异步操作
  • 原文地址:https://www.cnblogs.com/Chilly2015/p/5691680.html
Copyright © 2011-2022 走看看