zoukankan      html  css  js  c++  java
  • typeid操作符

    typeid() operator返回type_info,返回值不可拷贝、不可赋值

    // Illustrates the typeid operator.
    #include <iostream>
    #include <typeinfo>
    using namespace std;
    
    struct PolyBase { virtual ~PolyBase() {} };
    struct PolyDer : PolyBase { PolyDer() {} };
    
    struct NonPolyBase {};
    struct NonPolyDer : NonPolyBase { NonPolyDer(int) {} };
    
    int main() {
      // Test polymorphic Types
      const PolyDer pd;
      const PolyBase* ppb = &pd;
      cout << typeid(ppb).name() << endl;
      cout << typeid(*ppb).name() << endl;
      cout << boolalpha << (typeid(*ppb) == typeid(pd))
           << endl;
      cout << (typeid(PolyDer) == typeid(const PolyDer))
           << endl;
    
      // Test non-polymorphic Types
      const NonPolyDer npd(1);
      const NonPolyBase* nppb = &npd;
      cout << typeid(nppb).name() << endl;
      cout << typeid(*nppb).name() << endl;
      cout << (typeid(*nppb) == typeid(npd)) << endl;
    
      // Test a built-in type
      int i;
      cout << typeid(i).name() << endl;
    
      return 0;
    
    } ///:~
    

    输出结果是:

    struct PolyBase const *
    struct PolyDer
    true
    true
    struct NonPolyBase const *
    struct NonPolyBase
    false
    int

    The first output line just echoes the static type of ppb because it is a pointer. To get RTTI to kick in, you need to look at the pointer or reference destination object, which is illustrated in the second line. Notice that RTTI ignores top-level const and volatile qualifiers. With non-polymorphic types, you just get the static type (the type of the pointer itself). As you can see, built-in types are also supported.


    内容源自:《TICPP-2nd-ed-Vol-two》

  • 相关阅读:
    Leetcode 18. 4Sum
    Leetcode 15. 3Sum
    Leetcode 16. 3Sum Closest
    String类型的理解
    求字符串中某个字符出现的次数
    用StringBuilder来实现经典的反转问题
    String/StringBuilder 类 用对象数组实现登录注册功能
    String/StringBuilder 类 统计字符串中字符出现的次数
    String/StringBuilder 类 判断QQ号码
    C++ 面向对象: I/O对象的应用
  • 原文地址:https://www.cnblogs.com/xkxjy/p/3672250.html
Copyright © 2011-2022 走看看