Форум программистов, компьютерный форум CyberForum.ru

inline функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.85
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
27.05.2010, 20:18     inline функции #1
Как рабоает функция inline, и какие у неё преимущества? Если она такая крутая как я понял, то зачем простые функции??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2010, 20:18     inline функции
Посмотрите здесь:

встроенные функции (inline) C++
Inline функции C++
C++ Inline функции.
C++ inline функции vs инструкции inline функций
inline функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
27.05.2010, 20:39     inline функции #2
Цитата Сообщение от nikkka Посмотреть сообщение
Как рабоает функция inline, и какие у неё преимущества? Если она такая крутая как я понял, то зачем простые функции??
надо использовать подставляемые функции только там, где они действительно нужны. к тому же большинство компиляторов может просто их игнорировать.
опять же если все функции делать инлайнами, то размер программы в разы увеличится.
RAIDER_55
24 / 24 / 5
Регистрация: 04.04.2010
Сообщений: 229
27.05.2010, 20:40     inline функции #3
inline функция просто вставляет код в место вызома. Она хороша если вызываемая функция маленькая.
][акер
#define книжный_червь Я
 Аватар для ][акер
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
27.05.2010, 20:45     inline функции #4
Цитата Сообщение от RAIDER_55 Посмотреть сообщение
код в место вызома
Т.е. коды машинных комманд (в exe-файле). Поправляю чтобы nikkka не запуталась.
griseus
0 / 0 / 0
Регистрация: 14.09.2010
Сообщений: 3
19.09.2010, 20:44     inline функции #5
у меня вопрос по поводу подставляемых функций.
что такое подставляемая функция я вроде понял .... вопрос вот в чём - когда функция считается подставляемой...
на сколько я понял (для классов) функция подставляемая если она определена в .h файле, а если она определена в .cpp файле, то она обычная.... правильно ли я понял ??? поправте если что !!!
у меня есть в проекте .h файл в который я вынес функцию (потому, что её определение очень большое, а я не хочу заграмождать основной файл)
вопрос функция ж не будет подставляемой если она определена в .h файле без идентификатора inline???
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.09.2010, 12:27     inline функции #6
Цитата Сообщение от griseus Посмотреть сообщение
на сколько я понял (для классов) функция подставляемая если она определена в .h файле, а если она определена в .cpp файле, то она обычная....
функция подставляемая только если она имеет спецификатор inline, не важно к классам относится она или нет

а вынос кода в .h и .сpp файлы делается для разделения интерфейса и реализации
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
20.09.2010, 12:37     inline функции #7
griseus, директива inline просит компилятор сгенерировать код этой ф-ции в месте её вызова (вместо самого вызова). Очевидно, что бы компилятор мог это сделать, код inline ф-ции должен быть в той же единице трасляции, что и место вызова. Иными словами, если некий код в файле cpp делает вызов ф-ции swap, что эта ф-ция должна быть определена (не оглашена, а полностью определена) в том же cpp файле либо в файле, к-рый подключается через #include директиву.

Есть ограничения, в силу к-рый компилятор не сможет сделать ф-цию встроенной (inline) - наличие статических переменных в ф-ции, вроде бы даже переменные в стеке. Так же рекурсивные ф-ции.

Основное преимущество inline ф-ции - при небольшом обьёме она выполниться быстрее, чем вызов.
Причин несколько, среди них - так называемый cache miss, то есть во время вызова ф-ции может оказаться, что она в другой странице памяти, к-рая не находиться в кеше. Когда же код встроенной ф-ции находится рядом, его не надо искать и всё такое.

Лучшимы кандидатами на inline ф-ции являются getter'ы и setter'ы.

И да, методы класса, определённые внутри определения класса, по-умолчанию считаются inline.

UPD: Все размышления являются моим собственным мнением и кое-где могу быть не совсем прав.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.09.2010, 12:42     inline функции #8
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
И да, методы класса, определённые внутри определения класса, по-умолчанию считаются inline
да кстати
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2010, 13:34     inline функции
Еще ссылки по теме:

C++ inline - функции
C++ inline функции
C++ Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
20.09.2010, 13:34     inline функции #9
Цитата Сообщение от nikkka Посмотреть сообщение
Как рабоает функция inline, и какие у неё преимущества? Если она такая крутая как я понял, то зачем простые функции??
Вот здесь описал некоторые моменты, про которых в учебниках не всегда пишут
Зачем нужен inline

А по части подставлять или не подставлять тело функции - современные компиляторы как правило кладут на этот признак (поскольку модификатор inline НЕ обязывает компилятор к чему-либо) и сами решают, что подставлять, а что нет.
Yandex
Объявления
20.09.2010, 13:34     inline функции
Ответ Создать тему
Опции темы

Текущее время: 05:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru