Re[7]: встраивается ли boost/std::bind
От: Evgeny.Panasyuk Россия  
Дата: 04.02.15 22:57
Оценка: +1
Здравствуйте, swingus, Вы писали:

EP>>Уверен что современные компиляторы легко оптимизируют подобные косвенные вызовы.

S>У современного компилятора столько же шансов соптимизировать std::bind(), сколько виртуальную функцию.

Какой конкретно bind? С указателем на функцию внутри?
Это смотря как считать. Результат bind часто используется в контекстах, где передаётся в шаблон функции, который где-то внутри сразу его вызывает (смотри пример jazzer'а), то есть грубо говоря статический полиморфизм. И после инлайнинга, легко доказывается что этот указатель на функцию константен.
А виртуальные функции практически всегда используются для динамического полиморфизма, при котором в месте вызова статически не известно какой конкретно метод нужно вызывать (хотя есть эвристические методы типа PGO).
И уж шансов соптимизировать подобный bind на порядки выше чем виртуальный вызов.

А вот если сравнивать с тем bind'ом, который принимает функциональные объекты — то тут вообще не о чём спорить, так как какой конкретно код нужно вызывать закодировано в типе возвращаемого объекта.

EP>>Думаю имелось в виду что шансов встроить указатель на функцию меньше (а не "мало"), так как очевидно код привязан не к типу, а к значению указателя.

S>Вот как раз Скотт говорит, что хранится указатель на функцию, так что это "очевидно" совсем не очевидно.

Так я и говорю, что здесь код привязан к значению, то есть хранится значение. Более того, для разных входных указателей на функции, но с одинаковым типом, получится одинаковый тип результата bind
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.