При объявлении функций в языке C++ имеется возможность задать значения аргументов по умолчанию. Первый случай применения этой возможности языка – сокращение записи. Если функция вызывается с одним и тем же значением аргумента в 99% случаев, и это значение достаточно очевидно, можно задать его по умолчанию. Предположим, функция exp возводит число в произвольную целую положительную степень. Чаще всего она используется для возведения в квадрат. Ее объявление можно записать так:
double exp(double x, unsigned int e = 2);
Определение функции:
doubleexp(double x, unsigned int e){ double result = 1; for (int i = 0; i < e; i++) result *= x; return result;}main(){ double y = exp(3.14); double x = exp(2.9, 5); }
Использовать аргументы по умолчанию удобно при изменении функции. Если при изменении программы нужно добавить новый аргумент, то для того чтобы не изменять все вызовы этой функции, можно новый аргумент объявить со значением по умолчанию. В таком случае старые вызовы будут использовать значение по умолчанию, а новые – значения, указанные при вызове.
Необязательных аргументов может быть несколько. Если указан один необязательный аргумент, то либо он должен быть последним в прототипе, либо все аргументы после него должны также иметь значение по умолчанию.
Если для функции задан необязательный аргумент, то фактически задано несколько подписей этой функции. Например, попытка определения двух функций
double exp(double x, unsigned int e = 2);double exp(double x);
приведет к ошибке компиляции – неоднозначности определения функции. Это происходит потому, что вызов
double x = exp(4.1);
подходит как для первой, так и для второй функции.