170 похожих чатов

Кстати, всегда мучал вопрос: почему принято передавать функторы по значению,

если у нас есть std::function и лямбды с захватом, которые может быть дорого передавать таким способом?

18 ответов

15 просмотров

function в себе хранит указатель на функцию, тут сложности копирования нет

Max-Kolesnikov Автор вопроса
Ramil Rizvanov
function в себе хранит указатель на функцию, тут с...

Указатель-то хранит. Вот только может хранить "по значению" еще много чего, как и лямбда с захватом

Потому что возможно вызов будет вне контекста определения переменных, на которые может идёт ссылка из объекта функтора

Max-Kolesnikov Автор вопроса
Ilya Zviagin
Потому что возможно вызов будет вне контекста опре...

По значению функторы принимает например стдлиба, там вызов всегда "на месте"

Max Kolesnikov
По значению функторы принимает например стдлиба, т...

Ну это наивное понимание, вовсе не всегда

Max-Kolesnikov Автор вопроса
Ilya Zviagin
Ну это наивное понимание, вовсе не всегда

Для всего в <algorithm>, например. Кроме, может, перегрузок с ExecutionPolicy

Lifetime.

Max-Kolesnikov Автор вопроса
Red Paper
Lifetime.

Какой лайфтайм для find_if например?

Max Kolesnikov
Какой лайфтайм для find_if например?

Про функторы говорю. > которые может быть дорого передавать таким способом Конструктор function принимает forwarding reference. По значению передать и не получится.

Max-Kolesnikov Автор вопроса
Red Paper
Про функторы говорю. > которые может быть дорого ...

Сам std::function замечательно передается по значению Вопрос был, почему функторы в шаблонных функциях всегда передаются по значению, почему их никогда не форвардят? template< class InputIt, class UnaryPredicate > InputIt find_if( InputIt first, InputIt last, UnaryPredicate p );

Max-Kolesnikov Автор вопроса
Ramil Rizvanov
Ну форвардни

Да я-то форвардну, любопытно же, почему так никогда не делают

Max-Kolesnikov Автор вопроса
Max-Kolesnikov Автор вопроса
Ramil Rizvanov
Например

Я уже приводил пример с <algorithm>, да и вообще любая функция, принимающая функтор в стдлибе так себя ведет

Max Kolesnikov
Сам std::function замечательно передается по значе...

Форвардинг это в любом случае ССЫЛКА, а она внезапно может стать висячей

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта