• 60.左值右值以及类型判断


    前提是要包含头文件

    1 #include <type_traits>
    • 判断是否是左值引用 是否是右值引用 是否是数组 是否是一个整数 是否是一个类
       1     check(1, 10);
       2     int i(10);
       3     int &ri(i);
       4     int &&rri(i + 3);
       5     //判断是否是左值引用 0不是 1是
       6     cout << is_lvalue_reference<decltype(i)>::value << endl;
       7     cout << is_lvalue_reference<decltype(ri)>::value << endl;
       8     //判断是否是右值引用 0不是 1是
       9     cout << is_rvalue_reference<decltype(rri)>::value << endl;
      10 
      11     int a[5];
      12     int *p = a;
      13     //判断是否是数组
      14     cout << is_array<decltype(a)>::value << endl;
      15     cout << is_array<decltype(p)>::value << endl;
      16 
      17     int num = 10;
      18     double db = 20;
      19     string str1;
      20 
      21     //判断是否是一个整数
      22     cout << is_integral<decltype(num)>::value << endl;
      23     cout << is_integral<decltype(db)>::value << endl;
      24     //判断是否是一个类
      25     cout << is_class<decltype(str1)>::value << endl;
    • 判断模板数据类型是否一致
      1 //判断模板数据类型是否一致
      2 template<class T1,class T2>
      3 void same(const T1 &t1, const T2 &t2)
      4 {
      5     cout << typeid(t1).name() << is_integral<T1>::value << endl;
      6     //判断模板的数据类型
      7     cout << is_same<T1, T2>::value << endl;
      8 }
    • 模板与type高级,根据类型不同选用相应的操作
       1 template<typename T1,typename T2>
       2 void check(const T1 &t1, const T2 &t2,
       3     typename enable_if<is_same<T1, T2>::value>::type *p = nullptr)
       4 {
       5     cout << "  " << t1 << "  " << t2 << endl;
       6     cout << "类型相同" << endl;
       7 }
       8 
       9 template<typename T1, typename T2>
      10 void check(const T1 &t1, const T2 &t2,
      11     typename enable_if<!is_same<T1, T2>::value>::type *p = nullptr)
      12 {
      13     cout << "  " << t1 << "  " << t2 << endl;
      14     cout << "类型相同" << endl;
      15 }
  • 相关阅读:
    CodeForces
    [AHOI 2013] 差异
    BZOJ
    [校内训练20_09_15]ABC
    [校内训练20_09_10]ABC
    [校内训练20_09_08]AC
    fastIO
    [校内训练20_06_05]ABC
    [校内训练20_06_04]ABC
    [校内训练20_06_03]ABC
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8567315.html
Copyright © 2020-2023  润新知