1. 程式人生 > >C++:建構函式的初始化列表,以及初始化的順序

C++:建構函式的初始化列表,以及初始化的順序

建構函式的初始化值列表:

對於物件的資料成員而言,初始化和賦值是有區別的。

當資料成員是 const 、引用,或者屬於某種未提供預設建構函式的類型別的話,就必須通過建構函式的初始值列表為這些成員提供初始值,否則就會引發錯誤。

// 錯誤:ci 和 ri 必須初始化
CobstRef::ConstRef(int ii)
{// 賦值
    i = ii;
    ci = ii;
    ri = i;
}

//正確
ConstRef::ConstRef(int ii):i(ii),ci(ii),ri(i){}

在類中,初始化是直接初始化資料成員,而賦值實際上是先初始化、再賦值。所以賦值的效率比較低。

更重要的是,一些資料成員是必須要被初始化的。

所以建議大家養成使用初始值列表的習慣。

成員初始化的順序:

成員初始化的順序和它們在類定義中出現的順序一致,建構函式初始值列表中的前後位置不會影響實際的初始化順序。