デフォルトの初期化子リストを指定する必要がある特定のケースが 4 つあります。 ここで完全に議論
要するに、もしあなたが持っているなら
初期化リスト 必須
- 非静的 const データ メンバー
- 参照型のデータ メンバー
- 他のクラスのオブジェクトであるデータ メンバーにパラメーターを提供する
- 派生クラスから基本クラスの ctor パラメーターを提供します。
デフォルト引数の 1 つの欠点は、デフォルト引数が関数プロトタイプ パラメーター リストの末尾のパラメーターでなければならないことです。例えば:
欠点 (???) をデフォルト引数に
void f(int, int = 2, int = 3); // trailing defaults
void g(int = 1, int = 2, int c); // error
void h(int, int = 3, int); // error
私の質問は、私のコードがイニシャライザ リストに必要な 4 つのケースの間に収まらず、常にすべてのパラメータにデフォルト値が必要な場合、つまりデフォルト引数の欠点につながらない場合、どれを選択すればよいですか?またその理由は? ベストプラクティスは何ですか?
ある例
// option -1: for the default argument list
// my_array.h
my_array(int a_number_of_elements = 0, int default_val = 0);
//option-2 : default initalizer list
// my_array.h
my_array(int a_number_of_elements, int default_val);
//my_array.cpp
my_array:: my_array(int a_number_of_elements, int default_val)
: my_num_elements(a_num_elements), my_default_value(default_val)
ご覧いただきありがとうございます。