Подставляемые (inline) функции

Подставляемые (inline) функции

Подставляемые (inline) функции

C++ имеет еще одну важную черту, которой нет в языке С. Это подставляемые функции (inline function). Подставляемые функции не вызываются как обычные функции языка C++. В машинный код программы вставляется код, соответствующий этой функции. Это как бы параметризированная макроподстановка, но уже на процессе компиляции.

Существует два способа создания inline-функций. В первом используется модификатор inline. Например,

inline int f(void)

{

}

т.е. перед объявлением функции ставится модификатор inline. Он предшествует всем другим модификаторам. Причина введения таких функций – повышение эффективности работы программы. Каждый раз, когда происходит вызов функции, выполняется несколько действий, включая пересылку параметров в стек и возврат значения функции. Требуется несколько тактов процессора (может быть достаточно много) для выполнения этих действий. Когда же используется inline-функция, на вызов такой функции время не тратится, соответственно, возрастает скорость выполнения программы. Но возрастает и размер кода программы, особенно если функция достаточно большая. Таким образом, лучше использовать inline-функцию тогда, когда функция очень маленькая. Большие по размеру функции рекомендуется вызывать обычным образом.

Рассмотрим пример:

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

 

class _class

{

int i;

public:

int get_i(void);

void put_i(int j);

};

 

inline int _class::get_i(void)

{

return i;

}

 

inline void _class::put_i(int j)

{

i=j;

}

 

void main (void)

{

_class s;

 

s.put_i(10);

 

cout << s.get_i();

}

Важно помнить, что для компилятора inline это требование, а не команда создания inline-кода. Есть различные ситуации, препятствующие созданию inline-кода. Это происходит тогда, когда функция:

  • содержит циклы,
  • операторы switch, goto
  • или возвращает значение более одного раза.

Inline-функции не могут быть рекурсивными или содержать статические (static) переменные.

Функция, имеющая модификатор inline, может быть как функцией-членом какого-либо класса, так и обычной функцией.

Другой способ создания подставляемых функций в языке C++ состоит в описании функции внутри объявления шаблона класса. Любая функция, определенная внутри шаблона класса, автоматически делается inline-функцией. Поэтому нет необходимости предварять ее определение ключевым словом inline.

Например:

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

 

class _class

{

int i;

public:

int get_i(void)

{

return i;

}

void put_i(int j)

{

i=j;

}

};

 

void main (void)

{

_class s;

 

s.put_i(10);

 

cout << s.get_i();

}

Этот пример написан в стиле языка C++. В C++ короткие функции обычно определяются, как в этом примере, внутри класса.

Комментарии к записи Подставляемые (inline) функции отключены

Рубрика: Программирование

Обсуждение закрыто.