zoukankan      html  css  js  c++  java
  • C++运行时类型判断dynamic_cast和typeid

    dynamic_cast

    dynamic_cast < Type-id > ( expression )

    dynamic_cast<类型>(变量)

    运行期间检测类型转换是否安全

    dynamic_cast < Type-id > ( expression )

    1. 基类指针转换为派生类指针,将基类引用转换为派生类引用;
    2. 转换是有条件
      1. 如果指针(或引用)所指对象的实际类型与转换的目的类型兼容,则转换成功进行;
      2. 否则如执行的是指针类型的转换,则得到空指针;如执行的是引用类型的转换,则抛出异常

    下面是一个例子:
    例子代码
    运行结果:
    运行结果
    static_cast < Type-id > ( expression )

    该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。

    typeid

    typeid是C++关键字,获得类型的相关信息

    typeid语法形式:

    1. typeid ( 表达式 )
    2. typeid ( 类型说明符 )

    typeid功能: 获得表达式或类型说明符的类型信息

    表达式有多态类型时,会被求值,并得到动态类型信息;

    否则,表达式不被求值,只能得到静态的类型信息。

    类型信息用type_info对象表示

    type_info是typeinfo头文件中声明的类;

    typeid的结果是type_info类型的常引用; const type_info &xxx = typeid(xxxx)

    可以用type_info的重载的“==”、“!=”操作符比较两类型的异同;

    type_info的name成员函数返回类型名称,类型为const char *。
    例子代码:
    例子代码
    运行结果:
    由于C++标准没有对typeid做出要求,不同编译器结果不一样
    运行结果

  • 相关阅读:
    word-wrap和word-break的区别
    transform 二维转变
    过渡
    新闻下滑导航案例
    background-origin,clip
    边框图片
    背景样式
    线性渐变与径向渐变与重复渐变
    边框阴影
    盒模型和圆角
  • 原文地址:https://www.cnblogs.com/yanhua-tj/p/13996579.html
Copyright © 2011-2022 走看看