Бьерн Страуструп - Язык программирования С++. Главы 2-4
Страница 64. Стандартные значения параметров


 

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);   // ошибка

 Отметим, что в данном контексте наличие пробела между символами * и =
 весьма существенно, поскольку *= является операцией присваивания:

       int nasty(char*=0);      // синтаксическая ошибка

 
« Предыдущая статья   Следующая статья »