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); // ОШИБКА
Запятые без аргументов некрасиво смотрятся и легко могут стать причиной ошибки.