C++建構函式初始化列表與賦值

來源:互聯網
上載者:User

標籤:拷貝構造   初始化   沒有   調用   區別   nbsp   賦值   常量   基本   

C++中類的初始化操作一般有四個部分組成:

1.建構函式初始化列表

2.建構函式體內賦值

3.類外部初始化

4.類聲明時直接賦值

對於內部資料類型(char,int,float...),建構函式初始化列表和建構函式體內賦值,基本上沒多大區別,效率差異也不大,但兩者不能共存:

class Student{public:    Student(char *name, int age):       //A初始化列表      m_name(name),      m_age(age)    {    }    
  Student(char *name, int age) //B函數體內初始化 { m_name = name; m_age = age; }private: char *m_name; int m_age;};

對於類類型來說,最好是使用初始化列表方式,使用初始化列表相對建構函式方式少了一次調用預設建構函式的過程,這對於資料密集型的類來說,效能更加高效;

**初始化列表方式:所有類非待用資料成員都可以在這裡初始化,且成員變數初始化的順序是按照標頭檔定義的順序進行的,但類待用資料成員不能在這裡初始化;

**建構函式體內部方式:

  對於類非靜態成員,const型、引用型以及沒有預設建構函式測成員不能在這裡初始化;

        [1] 常量成員,因為常量只能初始化不能賦值,所以必須放在初始化列表裡面

        [2] 參考型別,引用必須在定義的時候初始化,並且不能重新賦值,所以也要寫在初始化列表裡面

        [3]沒有預設建構函式的類類型,因為使用初始化列表可以不必調用預設建構函式來初始化,而是直接調用拷貝建構函式初始化

  對於類靜態成員,可以在這裡修改可修改的靜態成員,但靜態成員必須已經在類外部初始化;

**類外部初始化方式:類似static const int資料成員可以在類外部初始化,也可以在類成員的聲明處初始化;其他static資料成員必須在類外部初始化;

**類中聲明方式:類似static const int資料成員可以在類成員的聲明處初始化;

C++建構函式初始化列表與賦值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.