zoukankan      html  css  js  c++  java
  • C++中四种强制类型转换的区别

    static_cast:用法static_cast<type>(old)old转换成type类型(可以是类类型,基本类型之间的转换),但没有运行时类型检查来保证安全性,基类不需要有虚函数,当把派生类转化成基类指针类型时,是安全的,但把基类转化成派生类时,不会进行动态类型检查

    注意static_cast不能转换掉expressionconstvolitale或者_unaligned属性

    dynamic_cast:用法dynamic_cast<type>(old)type必须是类的指针、类的引用或者void*基类必须有虚函数,否则编译不过,而static_cast 没有这个要求,当利用dynamic_cast把基类转化成派生类类型时,会动态检验操作是否安全,如对派生类的成员函数showbook访问

    注意static_cast不能转换掉expressionconstvolitale或者_unaligned属性

    reinterpret_cast:用法reinterpret_cast<type>(expression),转换一个指针为其他类型的指针,也允许将一个指针转换为整数类型,反之亦然。这个操作符能够在非相关的类型之间进行转换,如两个不相关的类之间,或者普通类型之间的转换。慎用

    注意static_cast不能转换掉expressionconstvolitale或者_unaligned属性

    const_cast:用法const_cast<type>(old),type必须是指针,引用或者类的对象(利用引用,否则会出现析构两次对象)这个类型操纵传递对象的const属性,或者是设置或者是移除

  • 相关阅读:
    Python基础之流程控制
    Python基础之深拷贝与浅拷贝
    常见开源告警系统对比分析(prometheus、open-falcon、zabbix)
    prometheus简介
    谈谈业务系统的监控报警
    UML类图与类的关系
    IntelliJ IDEA反向生成UML类图
    UML类图几种关系的总结
    UML类图详解和示例
    leetcode-----43. 字符串相乘
  • 原文地址:https://www.cnblogs.com/yaowj/p/4726241.html
Copyright © 2011-2022 走看看