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异常

  • 相关阅读:
    [原]80386中断表
    [原]elf可执行连接文件格式
    [原]nasm语法
    VLAN基础配置及Access接口
    配置hybird接口
    配置Trunk接口
    [导入]Oracle常用技巧和脚本
    [导入]ORACLE 常用的SQL语法和数据对象
    [导入]Oracle 基本知识
    [导入]Oracle特殊包
  • 原文地址:https://www.cnblogs.com/Chilly2015/p/5691680.html
Copyright © 2011-2022 走看看