| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Зачем нужен inline |
| Автор: Syltan 6.10.2009, 22:51 |
| Скажите пожалуйста, зачем нужна команда inline? Изучаю классы, и там говорится мимолётом, что эта функция повысит эффективность, но так и не понял зачем она нужна. Желательно пример с комментарием. Зараннее благодраю за скорый ответ. |
| Автор: niXman 6.10.2009, 22:57 |
| Предписывает компилятору сделать функцию/метод встраиваемым. Что экономит ресурсы проца на вызовах. Но не все функции могут быть встраиваемыми. |
| Автор: jonie 6.10.2009, 23:01 | ||
| Syltan, inline советует компилятор встроить вызов как есть (т.е. встроить тело функции в код, а не вызывать некий участок кода, передавая ему параметры). Компилятор вправе не слушать вас ). Например можно повысить эффуктивность get операций:
в момент вызова A::get_a() у вас не будет передачи параметра b, а будет "вписано" по сути: offsetof(A object)->a + b вообще inline забудьте, он в 99% случаев не нужен, т.к. современные оптимизаторы и не хуже вас разбираются "нужен тут inline или нет".... |
| Автор: bsa 6.10.2009, 23:08 | ||
jonie, он нужен в случае:
|
| Автор: niXman 6.10.2009, 23:13 | ||
bsa, Почему-то мне думается, что если в методе будет нечто вроди:
он все равно будет встраиваемый. |
| Автор: jonie 6.10.2009, 23:21 |
| bsa, да нафиг он современным оптимизаторам не нужен... скорость на этом особую не выиграешь в большинстве приложений, а где надо (драйвера для обработки видео например) - там профилировщик покажет узкие места. |
| Автор: Remiznik 6.10.2009, 23:33 | ||
если я не ошибаюсь то если на писать так
то метотд get_a_b компилятор зделаеть inline ? |
| Автор: jonie 6.10.2009, 23:57 |
| Remiznik, как я и писал выше, это не приказ компилятору - только совет. Компилятор может вообще от класса избавиться в итоговом коде... (хотя на определенных компиляторах можно выставить опции так, что inline будет приказом, но это скорее исключение из правил). А на ваш ответ - да, это рассматривается как будто написано с inline. |
| Автор: Remiznik 7.10.2009, 00:01 |
| я гдето читал что если компилятор не сможет встаить метод как inline то он его сделает обычным методом и будет сним работать как с обычнм ! |
| Автор: niXman 7.10.2009, 00:07 |
| Именно так. |
| Автор: zim22 7.10.2009, 09:43 | ||||||
можно и наоборот
|
| Автор: azesmcar 7.10.2009, 09:46 |
| Встраивается не функция а вызов функции (она может быть встраиваемой в одном участке кода и не встраиваемой в другом) а ключевое слово inline лучше не писать, позвольте компилятору самому решать, он больше знает об этом чем вы. |
| Автор: Леопольд 7.10.2009, 10:17 | ||
Однако при помощи inline можно влиять на способ компоновки. Именно поэтому все функции определённые в теле класса по умолчанию являются инлайн, иначе программа не скомпонуется., потому что, как правило, определение класса находится в заголовочном файле, и таким образом может быть нарушенно ODR (правило одного определения), а инлайн функции не подчиняются ему. |
| Автор: bsa 7.10.2009, 11:35 | ||
Именно это я и имел в виду, когда приводил свой пример - если реализация метода вне тела класса, но в хидере, то необходимо указывать inline. |