美文网首页
C++ 语法和知识点

C++ 语法和知识点

作者: Barry_Xu | 来源:发表于2019-09-27 09:58 被阅读0次
    • const 用在成员函数后 (不可以用在static 函数和非成员函数)

      class aa {
        public:
          int value;
          int getValue() const;
      }
      

      表示在getValue() 不可以修改类的成员。如修改 value,会导致报错。

    • weakptr 作用

      • 对象被析构了,weakptr会自动等于nullptr
      • weakptr可以还原成sharedptr而不会让引用计数错乱
        • weakptr.lock() 转化为sharedptr
    • enum class/enum struct
      这是C++ 11 引入的。传统 enum 关键字作用域是全局的。

      enum class A
      {
          my_enum3 = 0,
      };
      
      A a = A::my_enum3; //用的时候要加上作用域
      

      同时可以明确底层数据类型

      enum class A: int /** 每个枚举都是int类型的 */
      {
          my_enum3 = 0,
      };
      
      enum class B: unsigned char /** 每个枚举都是unsigned char类型的 */
      {
          my_enum3 = 0,
      };
      
      int my_int = A::my_enum3; /** 错误,无法通过编译 */
      int my_int = static_cast<int>(A::my_enum3); /** 正确, 可以通过编译 */
      
    • 一些判断方法

      • 判断类型
            #include <type_traits>
            #include <iostream>
            #include <typeinfo>
        
            using namespace std;
        
            class AA{};
            class BB{};
            int main()
            {
                int i = 4;
                int &&n = 6;
        
                cout << is_rvalue_reference<decltype(n)>::value << endl;
                cout << is_lvalue_reference<decltype(i)>::value << endl;
                cout << is_reference<decltype(i)>::value << endl;
        
                AA a;
                BB b;
        
                cout << typeid(a).name() << endl;
                cout << typeid(b).name() << endl;
        
                AA c;
        
                auto a_vs_c = typeid(a).hash_code() == typeid(c).hash_code();
                auto a_vs_b = typeid(a).hash_code() == typeid(b).hash_code();
                cout << "a_vs_c: " << a_vs_c << endl;
                cout << "a_vs_b: " << a_vs_b << endl;
        
                return 0;
            }
        
      • 判断是否是const 还是 volatile
        #include <type_traits>
        #include <iostream>
        using namespace std;
        ...
        cout << is_const<decltype(ic)>::value<<endl;  //1
        cout << is_volatile<decltype(iv)>::value<<endl;  //1
        

    相关文章

      网友评论

          本文标题:C++ 语法和知识点

          本文链接:https://www.haomeiwen.com/subject/hpyjuctx.html