256 ___________________________Часть II. Программирование на C++

Будем надеяться, что вы получили достаточное представление о списках аргументов переменной длины и сможете разобраться, в каком контексте они вам пригодятся.

Значения по умолчанию

C++ делают таким гибким и элегантным языком многие его возможности. Одна из них — значения, присваиваемые аргументам по умолчанию. Перегрузке функций (описывается в главе 15 "Перегрузка функций") иногда можно предпочесть присваивание аргументам значений по умолчанию. Для начала мы рассмотрим, что же такое аргументы по умолчанию, а затем разберемся, как их применять.

Аргумент по умолчанию (default argument) задается присваиванием значения переменному параметру. Например:

void Foo( int a = 5) ;

«

Теперь при вызове функции Foo можно передать ей целочисленный параметр:

Foo(lO); // а равно 10

а можно и не передавать:

Foo(); //а равно 5, т. е. значению по умолчанию

в этом случае а будет равно 5. В обоих примерах вызывается одна и та же функция: в первом случае значение указывается явно, а во втором — используется по умолчанию. Если у параметров явно просматриваются стандартные значения, то имеет смысл воспользоваться таким подходом.

Задавать значения аргументов по умолчанию можно только справа налево. Это значит, что аргументу можно присвоить значение по умолчанию только в том случае, если все аргументы справа от него также имеют значение по умолчанию. Например:

int Function!( int a, char *р = 0); // правильно void Function2( float pi = 3.1415, int precision = 4); // правильно Complex Make( double r = 0, double i); // ОШИБКА

Аргументы размещаются именно в таком порядке для того, чтобы избежать ситуаций вроде такой, когда вам придется считать сиротливые запятые:

Complex с = Make( /* нет аргумента */, -1.0); // ОШИБКА

Запятые без аргументов некрасиво смотрятся и легко могут стать причиной ошибки.