![]() |
|
Модераторы: bsa |
![]()
|
|
| Syltan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 301 Регистрация: 31.8.2009 Репутация: -1 Всего: -2 |
Скажите пожалуйста, зачем нужна команда inline? Изучаю классы, и там говорится мимолётом, что эта функция повысит эффективность, но так и не понял зачем она нужна. Желательно пример с комментарием. Зараннее благодраю за скорый ответ.
|
|||
|
||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: нет Всего: 0 |
Предписывает компилятору сделать функцию/метод встраиваемым. Что экономит ресурсы проца на вызовах. Но не все функции могут быть встраиваемыми.
Это сообщение отредактировал(а) niXman - 6.10.2009, 23:00 --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
Syltan, inline советует компилятор встроить вызов как есть (т.е. встроить тело функции в код, а не вызывать некий участок кода, передавая ему параметры).
Компилятор вправе не слушать вас ). Например можно повысить эффуктивность get операций:
в момент вызова A::get_a() у вас не будет передачи параметра b, а будет "вписано" по сути: offsetof(A object)->a + b вообще inline забудьте, он в 99% случаев не нужен, т.к. современные оптимизаторы и не хуже вас разбираются "нужен тут inline или нет".... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
jonie, он нужен в случае:
|
|||
|
||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: нет Всего: 0 |
bsa, Почему-то мне думается, что если в методе будет нечто вроди:
он все равно будет встраиваемый. --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
bsa, да нафиг он современным оптимизаторам не нужен... скорость на этом особую не выиграешь в большинстве приложений, а где надо (драйвера для обработки видео например) - там профилировщик покажет узкие места.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Remiznik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 379 Регистрация: 30.4.2005 Репутация: 1 Всего: 1 |
если я не ошибаюсь то если на писать так
то метотд get_a_b компилятор зделаеть inline ? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
Remiznik, как я и писал выше, это не приказ компилятору - только совет. Компилятор может вообще от класса избавиться в итоговом коде... (хотя на определенных компиляторах можно выставить опции так, что inline будет приказом, но это скорее исключение из правил).
А на ваш ответ - да, это рассматривается как будто написано с inline. Это сообщение отредактировал(а) jonie - 6.10.2009, 23:57 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Remiznik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 379 Регистрация: 30.4.2005 Репутация: 1 Всего: 1 |
я гдето читал что если компилятор не сможет встаить метод как inline то он его сделает обычным методом и будет сним работать как с обычнм !
|
|||
|
||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: нет Всего: 0 |
Именно так.
--------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ага
P.S. сквозь несколько постов просочилась опечатка, в которой возвращающая значение функция декларирована как void. Это сообщение отредактировал(а) mes - 7.10.2009, 09:43 |
||||||
|
|||||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Встраивается не функция а вызов функции (она может быть встраиваемой в одном участке кода и не встраиваемой в другом) а ключевое слово inline лучше не писать, позвольте компилятору самому решать, он больше знает об этом чем вы.
Это сообщение отредактировал(а) azesmcar - 7.10.2009, 09:48 |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Однако при помощи inline можно влиять на способ компоновки. Именно поэтому все функции определённые в теле класса по умолчанию являются инлайн, иначе программа не скомпонуется., потому что, как правило, определение класса находится в заголовочном файле, и таким образом может быть нарушенно ODR (правило одного определения), а инлайн функции не подчиняются ему. -------------------- вопросов больше чем ответов |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Именно это я и имел в виду, когда приводил свой пример - если реализация метода вне тела класса, но в хидере, то необходимо указывать inline. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |