基础集合


///< 构造函数调用

///---> 1. 调用所有虚基类的构造函数, 从左到右, 又深到浅

//          a.列入初始化列表中的成员初始化

//          b.未列入初始化列表的成员,对象调用默认构造函数

//          c.初始化vfptr, vbfptr

///---> 2. new expression, operator new , placement new

///        a. new A() (三个步骤)

//              ---> operator new (sizeof(A))

//              ---> ctor()

//              ---> assign addr to pointer

///---> 3. delete 野指针情况

///---> 4. virtual 析构函数, 在基类指向子类的情况下析构,析构时需要调用子类的析构函数



///c++11引用绑定规则:

// a. 非常量左值引用(X&) : 只能绑定到X类型的对象

// b. 常量左值引用(const X&) : 可以绑定到X, const X类型的左值对象,也可以绑定X,const X的右值对象

// c. 非常量右值引用(X&&) : 只能绑定到X类型的右值

// d. 常量右值引用(const X&&) : 可以绑定到X,const X类型的右值

    int i = 0; 

    const int ii = 0;

    int &j = i;                    ///> a

    const int& k = i;              ///> b

    const int& g = 101;            ///> b

    const int& m = std::move(i);    ///> b

    const int& m0 = ii;            ///> b

    int &&n = std::move(i);        ///> c

    int &&o = 102;                  ///> c

    int &&o1 = (i + k);            ///> c

    const int&& p = std::move(i);  ///> d

    const int&& q = 103;            ///> d

    const int&& r = static_cast(i);



/// 引用叠加

//  Type& &    -->    Type&

//  Type& &&    -->    Type&

//  Type&& &    -->    Type&

//  Type&& &&  -->    Type&&

//  eg:

//      template void func(T&& f);

//      auto fp = func();

//                              ---> decaltype(fp) -> void (*)(int&& && f);

//                              ---> void (*)(int&& f);

你可能感兴趣的:(基础集合)