    Неважно, что придется ввести МАХ*2 операторов, и, если МАХ достаточно 
велико, скомпилированный код приобретет слоновьи пропорции. Не имеет значения, 
насколько вы улучшите быстродействие программы — на одну или две миллисекунды! 
    Нелепо? Да, несмотря на важность проблемы сбережения времени отказ от 
функций и циклов — слишком высокая цена за такое небольшое "улучшеньице". К 
счастью, C++ предлагает альтернативное решение этой проблемы. Вместо 
уничтожения вызовов функций вы можете объявить функции inline (встраиваемыми), 
вставляя тем самым их тела в поток кода. Как это сделать, показано в листинге 12.9. 

    Листинг 12.9.  INLINE.CPP (демонстрация встраиваемых функций) 

    1:   #include <iostream.h> 
    2:
    3:  inline int max(int a,   int b) 
    4:         { 
    5:            if (a >= b) 
    6:                 return a; 
    7:             else 
    8:                return b; 
    9:          } 
    10: 
    11:	main() 
    12:	{ 
    13:	  int х, у, z; 
    14: 
    15:	  cout « "X? "; 
    16:	  cin » x; 
    17:	  cout « "Y? "; 
    18:	  cin » y;                                            
    19:	  z = max(x, У); 
    20:	  cout « "max(a, b) == " « z « '\r\'; 
    21:	  return 0; 
    22:	}

    Для того чтобы объявить функцию встраиваемой, напишите перед ней ключевое 
слово inline, как показано в строке 3. Пишется функция как обычно (строки 
4-9). Ничего необычного в ее содержимом нет — все, что выполняется в любой 
функции, выполнится и для объявленной встраиваемой. Обычно встраиваемые 
функции, "подобные той, что определена в строках 3-9, объявляются в 
заголовочных файлах и включаются в каждый модуль, где необходимо их 
использование. Встраиваемую функцию необходимо полностью определить до того, 
как можно будет ее использовать, и включение ее текста в заголовочный файл — 
самый простой способ удовлетворения этого требования. 
    Используйте встраиваемые функции в точности так же, как вы используете 
обычные. Например, в строке 19 вызывается мах() для определения большего из 
двух целых чисел с присвоением этого значения переменной z. Конечно, в 
скомпилированном коде Borland C++ не вызывает функцию mах() в строке 19. 
Вместо этого компилятор вставляет тело функции непосредственно в программу, 
компилируя строку 19, как если бы она была написана следующим образом: 

    if (x >= у) 
      z = х; 
   else 
      z = у; 

    Время, сэкономленное в этом примере, минимально. Однако, если max() 
вызывается тысячи раз в цикле, быстродействие программы может существенно улучшиться. 

    ЗАМЕЧАНИЕ 

    Встраиваемые функции сродни регистровым переменным. Когда вы объявляете 
встраиваемую функцию, вы лишь даете указание компилятору, и, если возможно, 
тело функции будет вставлено прямо туда, откуда эта функция вызывается. 
Разумеется, компилятор — не золотая рыбка, и нет гарантия, что так будет с 
каждой вашей командой. Если встраиваемый код, к примеру, слишком велик, то 
компилятор может отказаться вставить функцию в поток кода, и вместо этого 
сгенерирует обычный вызов. Также при компиляция программ для Turbo Debugger 
все встраиваемые функции будут преобразованы в обычные вызываемые функции, 
которые можно будет отлаживать. Хорошие программы на C++ работают корректно 
вне зависимости от того, как скомпилированы в них встраиваемые функции. 


    Глава 12. Введение в C++         289 
    10 Освоение Borland® C++4.5 
