Встраиваемой (подставляемой) функцией называется функция, код которой подставляется компилятором в каждое место её вызова. Таким образом, при выполнении программы вызова функции фактически не происходит, что позволяет избежать связанных с этим накладных расходов на работу со стеком.
Для определения встраиваемой функции используется модификатор inline, который ставится в начало объявления функции. Например:
inline unsigned short string_length(const char* string)
{
int i = 0;
while(string[i++])
;
return --i;
}
void main()
{
cout << string_length("") << ' ' << string_length("1234") << ' '
<< string_length("1234567890");
}
Здесь функция string_length вызывается в программе трижды. Так как она объявлена встроенной, то реально в программе в этих трех местах будет стоять не вызов функции, а код, который составляет её тело.
Обычно встраиваемые функции используют тогда, когда тело функции сравнительно невелико, а вызывается она часто. Из-за многократной подстановки кода функции в программу размер приложения несколько увеличится, но эффективность его также возрастет.
Не любая функция может быть объявлена встроенной. Конкретные ограничения зависят от используемого компилятора. Например, большинство компиляторов не дадут сделать встроенной рекурсивную функцию.
Компилятор MS Visual Studio, найдя в коде объявление встроенной функции, выполняет её анализ, определяя потенциальный выигрыш от встраивания. И если компилятор решит, что выигрыша нет – модификатор inline будет просто проигнорирован.