C++類構造函數初始化列表

c++中初始化列表在構造函數中作用:

include<iostream>
class A{
public:
    int a;
    const int b;
    A():b(0),a(0){}
};

int main()
{
    A a;
    return 0;
}

如果類A中使用構造函數將報錯

    A::A(){
        a = 0;
        b = 0;
    }

在以下情況時必須用帶有初始化列表的構造函數:
1. 成員類型是沒有默認構造函數的類。若沒有提供顯示初始化式,則編譯器隱式使用成員類型的默認構造函數,若類沒有默認構造函數,則編譯器嘗試使用默認構造函數將會失敗。
2. const成員或引用類型的成員。因爲const對象或引用類型只能初始化,不能對他們賦值。

初始化數據成員與對數據成員賦值的含義是什麼?有什麼區別?
首先把數據成員按類型分類並分情況說明:
1. 內置數據類型,複合類型(指針,引用)
在成員初始化列表和構造函數體內進行,在性能和結果上都是一樣的
2.用戶定義類型(類類型)
結果上相同,但是性能上存在很大的差別。因爲類類型的數據成員對象在進入函數體前已經構造完成,也就是說在成員初始化列表處進行構造對象的工作,調用構造函數,在進入函數體之後,進行的是對已經構造好的類對象的賦值,又調用個拷貝賦值操作符才能完成(如果並未提供,則使用編譯器提供的默認按成員賦值行爲),所以對非內置類型成員變量,爲了避免兩次構造,推薦使用類構造函數初始化列表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章