【C++】構造函數初始化列表中成員變量必須初始化的幾種情況

有一個類A,其數據成員如下:

class A
 {
...
private:
	int a;
public:
    const int b;
	float* &c;
	static const char* d;
	static double* e;
	};

則構造函數中,成員變量一定要通過初始化列表來初始化的是:b,c

構造函數中,成員變量一定要通過初始化列表來初始化的有以下幾種情況

  • const常量成員,因爲常量只能在初始化,不能賦值,所以必須放在初始化列表中;
  • 引用類型,引用必須在定義的時候初始化,並且不能重新賦值,所以也要寫在初始化列表中;
  • 沒有默認構造函數的類類型,因爲使用初始化列表可以不必調用默認構造函數來初始化,而是直接調用拷貝構造函數;

對於static const char* d 來說,因爲static屬於類並不屬於具體的對象,所以 static成員是不允許在類內初始化的,那麼static const 成員是不是在初始化列表中呢?

答案是NO

原因在於:

  1. 是static屬於類,它在未實例化的時候就已經存在了,而構造函數的初始化列表,只有在實例化的時候才執行。
  2. 是static成員不屬於對象。我們在調用構造函數自然是創建對象,一個跟對象沒直接關係的成員要它做什麼呢。

因此,由static修飾的變量不需要在構造函數中初始化。
 

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