Есть четыре конкретных случая, когда вы должны указать список инициализаторов по умолчанию. Подробно обсуждается здесь
Короче говоря, если у вас есть
Обязательный список инициализаторов
- нестатические константные элементы данных
- элемент данных ссылочного типа
- предоставить параметры членам данных, которые являются объектами другого класса
- предоставить параметры 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)
Спасибо, что посмотрели.
std::vector
является довольно хорошим примером разумного контейнера, похожего на массив... - person Kerrek SB   schedule 14.09.2013