Этот шаг посвящен еще одному "экзотическому" свойству функций.
Некоторые функции в языке C++ можно определить с использованием специального служебного слова inline. Спецификатор позволяет определить функцию как встраиваемую, то есть подставляемую в текст программы в местах обращения к этой функции. Например, следующая функция определена как подставляемая:
inline float module(float x = 0, float у = 0) { return sqrt(x * x + у * у); }
Обрабатывая каждый вызов встраиваемой функции, компилятор "пытается" подставить в текст программы код операторов ее тела. Тем самым при многократных вызовах подставляемой функции размеры программы могут увеличиться, однако исключаются затраты на передачи управления к вызываемой функции и возвраты из нее. Кроме того, подстановка функции позволяет проводить оптимизацию кода. Наиболее эффективно использовать подставляемые функции в тех случаях, когда тело функции состоит всего из нескольких операторов.
Перечислим причины, по которым функция со спецификатором inline будет трактоваться как обычная не подставляемая:
Если же для функции со спецификатором inline компилятор не может
выполнить подстановку
из-за контекста, в который помещено обращение к ней, то функция считается
статической (static)
и выдается предупреждающее сообщение. Еще одна особенность
подставляемых функций -
невозможность их изменения без перекомпиляции всех частей программы, в
которых эти
функции вызываются.
Следующий шаг будет посвящен вопросам передачи массивов в функции.