Functions
F.51
Там, где есть выбор, предпочитайте аргументы по умолчанию перегрузке
Причина
Аргументы по умолчанию просто предоставляют альтернативные интерфейсы для единственной реализации. Нет гарантии, что набор перегруженных функций реализует одну и ту же семантику. Использование аргументов по умолчанию может избежать дублирования кода.
Примечание
Когда варианты берутся из набора аргументов одних и тех же типов, существует выбор между использованием аргумента по умолчанию и перегрузкой. Например:
void print(const string& s, format f = {});
против:
void print(const string& s); // использовать формат по умолчанию
void print(const string& s, format f);
Выбора нет, когда набор функций используется для выполнения семантически эквивалентной операции над набором типов. Например:
void print(const char&);
void print(int);
void print(zstring);
Смотрите также
Аргументы по умолчанию для виртуальных функций
Контроль
- Предупреждать о наборе перегрузок, где перегрузки имеют общий префикс параметров (например,
f(int),f(int, const string&),f(int, const string&, double)). (Примечание: пересмотрите этот контроль, если он создаёт слишком много шума на практике.)