標籤:拷貝構造 初始化 沒有 調用 區別 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++建構函式初始化列表與賦值