Встроенные функции в C++

Кроме обычных функций в C++, о которых вы уже знаете, есть еще встроенные функции. Встроенные функции не так значимы, но желательно в них разбираться. Основная идея в том, чтобы ускорить программу ценой занимаемого места. Встроенные функции во многом похожи на заполнитель. После того как вы определите встроенную функцию с помощью ключевого слова inline, всякий раз когда вы будете вызывать эту функцию, компилятор будет заменять вызов функции фактическим кодом из функции.

Как это делает программу быстрее? Легко, вызовы функций занимают больше времени, чем написание всего кода без функции. Просмотр вашей программы и замена функции, которую вы использовали 100 раз с кодом из функции, займет очень много времени. Конечно, используя встроенные функции для замены обычных вызовов функций, вы также значительно увеличите размер вашей программы.

Использовать ключевое слово inline легко, просто поставьте его перед именем функции. Затем, используйте её как обычную функцию.

Пример встроенной функции

#include <iostream>

using namespace std;

inline void hello()
{ 
  cout<<"hello";
}
int main()
{
  hello(); //Call it like a normal function...
  cin.get();
}

Однако, как только программа будет скомпилирована, вызов hello(); будет заменен на код функции.

Встроенные функции очень хороши для ускорения программы, но если вы используете их слишком часто или с большими функциями, у вас будет чрезвычайно большая программа. Иногда большие программы менее эффективны, и поэтому они будут работать медленнее, чем раньше. Встроенные функции лучше всего подходят для небольших функций, которые часто вызываются.

Наконец, обратите внимание, что компилятор может, по своему желанию, игнорировать ваши попытки сделать функцию встроенной. Так что если вы ошибетесь и сделаете встроенной чудовищную функцию в пятьдесят строк, которая вызывается тысячи раз, компилятор может игнорировать вас.

В будущем мы будем обсуждать встроенные функции в классах C++. Теперь, когда вы понимаете концепцию, я буду чаще использовать встроенные функции в последующих уроках.

Практика

К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!

Автор: Marienko L.
Дата: 02.10.2012
Поделиться:

Комментарии

  1. FreakMurderer

    В будущем мы будем обсуждать встроенные функции в классах C++

    ссылка есть?

  2. maxis11

    В 99% случаев компилятор сам прекрасно понимает что инлайнить, едиснтвенное, когда это может быть полезно например

    class EngGLThreadPool {
    public:
        static void run();
        static void stop();
    ...
    };
    
    void EngGLThreadPool::stop() //multiple definition of `EngGLThreadPool::stop()'
    { ... }

    static метод (или функцию) нельзя объявлять два раза подряд, тогда и имеет смысл inline’ить или объявлять её в *.cpp файле уже

  3. Denya Lorents

    Если честно не очень понятно в чем конкретно смысл данных функций. Ускорение программы если эти функции маленькие и всё? Или же что-то ещё?

    • Иван

      Denya, как я понял — да. Т.к. когда компилятор встречает вызов обычной функции должны быть исполнены множество <a href=»http://s8.uploads.ru/IprzL.jpg»>команд</a>. И какой смысл использовать их для 1,2,3 строк операторов?Ведь удобочитаемость такого кода не окупает затрат времени на его выполнение. Поэтому, чтобы не жертвовать ни тем, ни другим сделаны inline functions

    • Андрей Аршинов

      Чтобы убедиться в выгоде от использования inline, нужно понимать как выполняется программа процессором : если стоит вызов функции, то процессор перейдёт к ней и будет пересылать данные через стек для оперирования этими данными внутри функции, а если идёт сразу код функции — не будет перехода и пересылки.

  4. Peter Kamikaze

    самое внятное объяснение, которое я нашел

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.