有四种特定情况,您必须指定默认初始化程序列表。 在这里充分讨论
简而言之,如果你有
初始化器列表 必需
- 非静态 const 数据成员
- 引用类型的数据成员
- 为作为其他类对象的数据成员提供参数
- 从派生类提供基类ctor参数。
默认参数的一个缺点似乎是默认参数必须是函数原型参数列表中的尾随参数。例如:
默认参数的缺点(???)
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)
感谢您的关注。