Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: inline и определение методов в объявлении класса  (Прочитано 19799 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 15-02-2008 06:42 » 

Цитата: ISO/IEC 14882:2003 раздел 9.3
A member function may be defined (8.4) in its class definition, in which case it is an inline member function (7.1.2)
- так функция тогда что ли автоматом inline становится, хотя это явно не указано ? Непоняяяятно что то)
« Последнее редактирование: 15-02-2008 11:23 от Вад » Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 15-02-2008 07:40 » 

Цитата: Алексей1153++
так функция тогда что ли автоматом inline становится, хотя это явно не указано ?
Если она содержит реализацию внутри определения класса - да. Это означает, что такая функция является inline-функцией (без указания слова inline).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 15-02-2008 07:59 » 

нифига себе... И зачем такое щасте? А если я не хочу инлайн , но выносить из класса реализацию метода не хочу ?
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 15-02-2008 08:56 » 

Алексей1153++, ну так в стандарте же сказано: не должно два раза включаться не-инлайновых методов. Кто поручится, что твой класс не будет включён при компиляции более чем одного .cpp-файла?

Кстати, во время поиска ответа на вопрос об операторах и иных функциях в STL-е натыкался на inline-определения приличных по размеру операторов - на скрин кода и более. Полагаю, как-то это компилятор оптимизирует? Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 15-02-2008 09:03 » 

в том то и фишко, что у меня есть такие методы - и поболее, чем на пол экрана. Надо будет пересмотреть код Улыбаюсь) И заодно лишний раз порядок навестить )
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 15-02-2008 09:15 » 

Алексей1153++, ну так в стандарте же сказано: не должно два раза включаться не-инлайновых методов. Кто поручится, что твой класс не будет включён при компиляции более чем одного .cpp-файла?

Воистину! Только inline поможет.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 15-02-2008 09:49 » new

я зыркнул в отладочном ассемблерном коде - усёфпорядке, авто-инлайн для большого метода точно не случается
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 15-02-2008 09:59 » 

Лёш, покажи свой "большой" метод. В нём наверняка есть несколько точек выхода, а такие методы по определению не могут быть inline.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sands
Помогающий

ua
Offline Offline

« Ответ #8 : 15-02-2008 10:21 » 

Спасибо всем за помощь! На данном етапе проблема решена. Возникнут новые - отпишусь ))
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 15-02-2008 10:30 » 

Джон, да, несколько
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 15-02-2008 10:35 » 

Я знал, я знал! Ага

Попробуй переделать его так, чтобы был только один return.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 15-02-2008 11:08 » 

попробовал, всё равно
Код:
337:      sss.SendSomeOfMessagesFromQueueThruSocket(4);
00440FC9   push        4
00440FCB   lea         ecx,[ebp-4Ch]
00440FCE   call        @ILT+8070(s_mail_messagez_manager::SendSomeOfMessagesFromQueueThruSocket) (00402f8b)
а дальше идёт новая строка исходника
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #12 : 17-02-2008 06:57 » 

Алексей1153++, насколько я помню inline это рекомендация, т.е. пожалуйсто миленький компилятор посторайся эту штуковину сделать inline.
Записан

Странно всё это....
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 17-02-2008 10:25 » 

LogRus, да, но даже если компилятор не пойдет на поводу, то все равно не будет ругаться.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #14 : 18-02-2008 09:00 » 

RXL, не будет, это я к тому, что не следует удивлятся.
Записан

Странно всё это....
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #15 : 28-05-2008 12:00 » 

ОФФ топ...
Леш, реализация метода в самом объявлении класса (если это не вынужденная мера, ну например класс шаблонный)дале не лучшее архитектурное решение и может быть оправдано, только:
1. если необходимо увеличить скорость работы реально узкого для производительности места (но тогда она обязана быть объявлена как инлайн, и естественно удовлетворять всем ограничениям инлайн функций, а их несколько, а не только та что озвучил Джон)
2. если это вынужденная необходимость (как я сказал, если например, класс шаблонный или там например пустая реализация деструктора у интерфейса)
Записан

С уважением Lapulya
LifeMaker
Гость
« Ответ #16 : 01-06-2008 08:50 » 

Лёш, покажи свой "большой" метод. В нём наверняка есть несколько точек выхода, а такие методы по определению не могут быть inline.

не вижу проблем, не позволяющих заинлайнить метод с несколькими точками выхода...
можно поподробнее?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines