Байланысты: Бьерн Страуструп. Язык программирования С . М Бином, 2011
4.6.7 Стандартные значения параметров В общем случае у функции может быть больше параметров, чем в самых простых и наиболее часто
используемых случаях. В частности, это свойственно функциям, строящим объекты (например,
конструкторам, см. $$5.2.4). Для более гибкого использования этих функций иногда применяются
необязательные параметры. Рассмотрим в качестве примера функцию печати целого числа. Вполне
разумно применить в качестве необязательного параметра основание счисления печатаемого числа,
хотя в большинстве случаев числа будут печататься как десятичные целые значения. Следующая
функция
void print (int value, int base =10);
void F()
{
print(31);
print(31,10);
print(31,16);
print(31,2);
}
напечатает такие числа:
31 31 1f 11111
Вместо стандартного значения параметра можно было бы использовать перегрузку функции print:
void print(int value, int base);
inline void print(int value) { print(value,10); }
Однако в последнем варианте текст программы не столь явно демонстрирует желание иметь одну
функцию print, но при этом обеспечить удобную и краткую форму записи.
Тип стандартного параметра сверяется с типом указанного значения при трансляции описания функции,
а значение этого параметра вычисляется в момент вызова функции. Задавать стандартное значение
можно только для завершающих подряд идущих параметров:
int f(int, int =0, char* =0); //
нормально
int g(int =0, int =0, char*); //
ошибка
int h(int =0, int, char* =0); //
ошибка
Бьерн Страуструп.
Язык программирования С++
114
Отметим, что в данном контексте наличие пробела между символами * и = весьма существенно,
поскольку *= является операцией присваивания:
int nasty(char*=0); // синтаксическая ошибка