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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.85
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
#1

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

27.05.2010, 20:18. Просмотров 5233. Ответов 8
Метки нет (Все метки)

Как рабоает функция inline, и какие у неё преимущества? Если она такая крутая как я понял, то зачем простые функции??
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2010, 20:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос inline функции (C++):

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

inline функции vs инструкции inline функций - C++
Здравствуйте. Чтобы не писать повторно код, нужно использовать функции. Но если функции компактные, то их лучше делать inline функциями, т....

Inline функции - C++
Здарова всем! А может кто-нибудь объяснить товарищу внятно, для чего нужны inline-функции? Вроде говорят, что их объявлять нужно до...

inline функции - C++
Добрый вечер. Хотелось бы узнать, есть ли минусы у inline функций кроме увеличения размера файла? Везде пишут что использование "жирных"...

Inline функции - C++
Друзья!Инлайн функции могу быть определены только внтури класса?Или могут быть определены вне класса?Если вне,то как?Спасибо!

inline - функции - C++
Стоит-ли добавлять префикс inline ко всем функциям, состоящим из 1-2 строк?

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

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

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

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

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

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

UPD: Все размышления являются моим собственным мнением и кое-где могу быть не совсем прав.
1
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.09.2010, 12:42 #8
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
И да, методы класса, определённые внутри определения класса, по-умолчанию считаются inline
да кстати
0
Evg
Эксперт CАвтор FAQ
17825 / 6035 / 388
Регистрация: 30.03.2009
Сообщений: 16,566
Записей в блоге: 26
20.09.2010, 13:34 #9
Цитата Сообщение от nikkka Посмотреть сообщение
Как рабоает функция inline, и какие у неё преимущества? Если она такая крутая как я понял, то зачем простые функции??
Вот здесь описал некоторые моменты, про которых в учебниках не всегда пишут
Зачем нужен inline

А по части подставлять или не подставлять тело функции - современные компиляторы как правило кладут на этот признак (поскольку модификатор inline НЕ обязывает компилятор к чему-либо) и сами решают, что подставлять, а что нет.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2010, 13:34
Привет! Вот еще темы с ответами:

inline функции - C++
Объясните, пожалуйста, почему со всеми inline программа не работает, а если их закомментировать - работает. // main.cpp #include...

Inline функции. - C++
Здравствуйте. Скажите пожалуйста, объявление функции как inline нужно делать как в прототипе так и в определении или достаточно только в...

Inline функции в классах - C++
можно функцию сделать подставляемой, не определяя при объявлении,а определить под классом?

встроенные функции (inline) - C++
скажите что значит встроенные функции? не пойму. class a { int x,y; public: void get_x(int i,int j) //как я...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.09.2010, 13:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru