コンストラクション関数初期化リストのメンバー変数を初期化する必要がある場合

1322 ワード

クラスAがあり、そのデータメンバーは以下の通りである.
1
2
3
4
5
6
7
8
9
10 class A { ... private :       int a; public :       const int b;       float * &c;       static const char * d;       static double * e; };
コンストラクション関数では、メンバー変数を初期化リストで初期化する必要があります.b c____.
コンストラクション関数では、メンバー変数がリストを初期化して初期化する必要がある場合は、次のようになります.
1、const定数メンバー、定数は初期化のみで、値を割り当てることができないため、初期化リストに置かなければならない.
2、参照タイプ、参照は定義時に初期化しなければならず、再付与できないので、初期化リストにも書く.
3、デフォルトコンストラクタのないクラスタイプ.初期化リストを使用すると、デフォルトコンストラクタを呼び出して初期化する必要がなく、コピーコンストラクタを直接呼び出すことができるからである.
static const char*dの場合、staticはクラスに属し、具体的なオブジェクトには属しないため、
staticメンバーはクラス内で初期化できませんが、static constメンバーは初期化リストにありますか?
答えはNO
1つはstaticがクラスに属し、インスタンス化されていないときにすでに存在し、コンストラクション関数の初期化リストは、インスタンス化されているときにのみ実行されます.
二つ目はstaticメンバーがオブジェクトに属していないことです.コンストラクション関数を呼び出すと、自然にオブジェクトが作成されます.オブジェクトと直接関係のないメンバーが何をしますか.
したがってstaticによって修飾された変数は構造関数で初期化する必要はない.