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

    隐式类型转换是安全的,显式类型转换是有风险的。

    static_cast

    "静态转换",也就是在编译期间转换,转换失败的话会抛出一个编译错误。

    const_cast

    将 const/volatile 类型转换为非 const/volatile 类型。

    reinterpret_cast

    仅仅是对二进制位的拷贝,不会借助已有的转换规则对数据进行调整。reinterpret_cast 可以认为是 static_cast 的一种补充,一些 static_cast 不能完成的转换,就可以用 reinterpret_cast 来完成。

    dynamic_cast

    其他三种都是编译时处理的,dynamic_cast是在运行时处理的,运行时要进行类型检查。

    不能用于内置的基本数据类型的强制转换。

    转换成功的话返回指向类的指针或引用,转换失败的话,则返回NULL。

    使用dynamic_cast转换时,基类中一定要有虚函数,否则编译不通过。
    原因:类中存在虚函数,就说明它有可能想要让基类指针指向派生类对象,此时转换才有意义。由于运行时类型检查需要类型信息,而这个信息存储在类的虚函数表中。

    向上转型时,dynamic_cast和static_cast效果一样;向下转型时,dynamic_cast具有类型检查功能,比static_cast更安全。

  • 相关阅读:
    Spring小结
    ByteBuffer使用之道
    NIO组件Selector调用实例
    NIO组件Selector详解
    NIO机制总结
    NIO组件Selector工作机制详解(下)
    javascriptBOM_DOM
    【前端】javascript基础学习
    【前端】CSS基础学习
    【mongodb】比较符及修改器
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12442383.html
Copyright © 2011-2022 走看看