Кроме обычных функций в 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++. Теперь, когда вы понимаете концепцию, я буду чаще использовать встроенные функции в последующих уроках.
Комментарии
FreakMurderer
ссылка есть?
maxis11
В 99% случаев компилятор сам прекрасно понимает что инлайнить, едиснтвенное, когда это может быть полезно например
static метод (или функцию) нельзя объявлять два раза подряд, тогда и имеет смысл inline’ить или объявлять её в *.cpp файле уже
Даниил Игоревич
Denya Lorents
Если честно не очень понятно в чем конкретно смысл данных функций. Ускорение программы если эти функции маленькие и всё? Или же что-то ещё?
Иван
Denya, как я понял — да. Т.к. когда компилятор встречает вызов обычной функции должны быть исполнены множество <a href=»http://s8.uploads.ru/IprzL.jpg»>команд</a>. И какой смысл использовать их для 1,2,3 строк операторов?Ведь удобочитаемость такого кода не окупает затрат времени на его выполнение. Поэтому, чтобы не жертвовать ни тем, ни другим сделаны inline functions
Иван
http://s8.uploads.ru/IprzL.jpg вот ссылка на картинку
Андрей Аршинов
Чтобы убедиться в выгоде от использования inline, нужно понимать как выполняется программа процессором : если стоит вызов функции, то процессор перейдёт к ней и будет пересылать данные через стек для оперирования этими данными внутри функции, а если идёт сразу код функции — не будет перехода и пересылки.
Peter Kamikaze
самое внятное объяснение, которое я нашел