1

デフォルトの初期化子リストを指定する必要がある特定のケースが 4 つあります。 ここで完全に議論

要するに、もしあなたが持っているなら

初期化リスト 必須

  1. 非静的 const データ メンバー
  2. 参照型のデータ メンバー
  3. 他のクラスのオブジェクトであるデータ メンバーにパラメーターを提供する
  4. 派生クラスから基本クラスの 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)

ご覧いただきありがとうございます。

4

2 に答える 2