если у нас есть std::function и лямбды с захватом, которые может быть дорого передавать таким способом?
function в себе хранит указатель на функцию, тут сложности копирования нет
Указатель-то хранит. Вот только может хранить "по значению" еще много чего, как и лямбда с захватом
Потому что возможно вызов будет вне контекста определения переменных, на которые может идёт ссылка из объекта функтора
По значению функторы принимает например стдлиба, там вызов всегда "на месте"
Ну это наивное понимание, вовсе не всегда
Для всего в <algorithm>, например. Кроме, может, перегрузок с ExecutionPolicy
Lifetime.
Какой лайфтайм для find_if например?
Про функторы говорю. > которые может быть дорого передавать таким способом Конструктор function принимает forwarding reference. По значению передать и не получится.
Сам std::function замечательно передается по значению Вопрос был, почему функторы в шаблонных функциях всегда передаются по значению, почему их никогда не форвардят? template< class InputIt, class UnaryPredicate > InputIt find_if( InputIt first, InputIt last, UnaryPredicate p );
Да я-то форвардну, любопытно же, почему так никогда не делают
Кто именно так не делает? Например?
Стдлиба например
Я уже приводил пример с <algorithm>, да и вообще любая функция, принимающая функтор в стдлибе так себя ведет
Форвардинг это в любом случае ССЫЛКА, а она внезапно может стать висячей
Теперь понял вопрос.
Обсуждают сегодня