Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статическа линковка inline функций, аномалия 
V
    Опции темы
azesmcar
Дата 19.6.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(zim22 @  19.6.2009,  15:48 Найти цитируемый пост)
с чего вы это взяли? 

догадался smile 

а о чем именно идет речь? о том что функция может встроится в одном участке кода и не встроится в другом или о том что она останется инлайн функцией?

Добавлено через 2 минуты и 51 секунду
инлайн - это рекоммендация (как вы замечательно выразились), но это не мешает компилятору встроить функцию в одном участке кода и не встроить в другом. Вообще об этом мало что известно из стандарта, поконкретнее можно говорить изучив документацию конкретного компилятора.
Цитата

...even if this inline substitution is omitted, the other rules for inline functions defined by 7.1.2 shall still be respected.

кусок предыдущей цитаты на который я бы хотел обратить ваше внимание.

PM   Вверх
zim22
Дата 19.6.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(azesmcar @  19.6.2009,  15:51 Найти цитируемый пост)
? о том что функция может встроится в одном участке кода и не встроится в другом 

если не сложно - со ссылочкой на стандарт smile

Добавлено через 1 минуту и 57 секунд
Цитата(azesmcar @  19.6.2009,  15:51 Найти цитируемый пост)
other rules for inline functions defined by 7.1.2 shall still be respected.

я прочитал эти other rules из 7.1.2
там нигде не сказано, что 
Цитата

функция может встроится в одном участке кода и не встроится в другом 


Это сообщение отредактировал(а) zim22 - 19.6.2009, 15:55


--------------------
PM MAIL   Вверх
azesmcar
Дата 19.6.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



zim22

Переписывать неохота smile
user posted image

Добавлено через 34 секунды
забыл автора указать.
Герб Саттер - More Exceptional C++

Добавлено через 3 минуты и 6 секунд
Цитата(zim22 @  19.6.2009,  15:54 Найти цитируемый пост)
я прочитал эти other rules из 7.1.2
там нигде не сказано, что 
Цитата

функция может встроится в одном участке кода и не встроится в другом 

Верно, так не написано, но написано
Цитата

The inline
specifier indicates to the implementation that inline substitution of the function body at the point of call is
to be preferred to the usual function call mechanism.


Добавлено через 4 минуты и 53 секунды
а это значит что встраивание происходит при вызове. А значит и отвечать на вопрос "можно ли встроить эту функцию" компилятор будет при вызове. В разных местах ответ может быть разный.
PM   Вверх
zim22
Дата 19.6.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(azesmcar @  19.6.2009,  16:01 Найти цитируемый пост)
а это значит что встраивание происходит при вызове

так не честно. у Саттера об этом чёрным-по-белому написано smile
Новые сложные задачи (стр.170)
Цитата

Ваш компилятор запросто может проигнорировать вашу просьбу, и даже не одним, а тремя способами.
* Не делая встроенными вызовы функций, которые вы объявили как inline
* Делая встроенными вызовы функций, которые вы не объявили встраиваемыми.
Встраивая некоторые из вызовов, оставляя другие вызовы той же функции обычными невстраиваевыми (независимо от того, объявлена ли функция как inline)




--------------------
PM MAIL   Вверх
azesmcar
Дата 19.6.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(zim22 @  19.6.2009,  16:23 Найти цитируемый пост)
так не честно. у Саттера об этом чёрным-по-белому написано smile

Ну так я его цитировал, а вам стандарт подавай smile 

PM   Вверх
zim22
Дата 19.6.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(azesmcar @  19.6.2009,  16:26 Найти цитируемый пост)
Ну так я его цитировал

так я ж не знал.  всё, что вы написали, это:
Цитата(azesmcar @  19.6.2009,  15:30 Найти цитируемый пост)
 я хотел сказать...функция может и не встроится, а может встроится в одном участке кода и не встроится в другом

Цитата(azesmcar @  19.6.2009,  15:51 Найти цитируемый пост)
с чего вы это взяли? догадался 

я не хочу, чтобы со мной случилось тоже, что и с Леопольд'ом. его дезинформировал преподаватель Лаптев smile



--------------------
PM MAIL   Вверх
azesmcar
Дата 19.6.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(zim22 @  19.6.2009,  16:30 Найти цитируемый пост)
так я ж не знал.  всё, что вы написали, это:

не, я потом имел ввиду..честно говоря с трудом вспомнил где про это читал smile

Добавлено через 1 минуту и 29 секунд
Цитата(zim22 @  19.6.2009,  16:30 Найти цитируемый пост)
я не хочу, чтобы со мной случилось тоже, что и с Леопольд'ом

ну этот процесс обратим к счастью smile 
PM   Вверх
Леопольд
Дата 20.6.2009, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Всё таки это была бага VC 2005

Результат выполнения после сборки g++ 4.3.3, что полностью совпадает с динамической компоновкой (по умолчанию) inline функций.
Код

var in deleg { dyn_func } = 2
var in deleg { sta_func } = 2
var in deleg { inl_func } = 2
var in deleg { sta_inl_func } = 2

var in main { dyn_func } = 2
var in main { sta_func } = 1
var in main { inl_func } = 2
var in main { sta_inl_func } = 1


Можно добавить extern к объявлению inl_func и поведение не изменится.



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
zim22
Дата 20.6.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



...

Это сообщение отредактировал(а) zim22 - 20.6.2009, 12:24


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0934 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.