Есть ли причина, по которой стандартные алгоритмы принимают лямбда-выражения по значению? [Дубликат]

На этот вопрос уже есть ответ здесь:

Почему предикаты алгоритмов операции последовательности передаются копией? 3 ответа

Поэтому я задал вопрос здесь:Лямбда работает на последней Visual Studio, но не работает в других местах на что я получил ответ, что мой код был определен реализацией, так как стандарт 25.1 [gorithms.general] 10 гласит:

Если не указано иное, алгоритмы, которые принимают функциональные объекты в качестве аргументов, могут свободно копировать эти функциональные объекты. Программисты, для которых важна идентичность объекта, должны рассмотреть возможность использования класса-обертки, который указывает на объект без копирования, такой какreference_wrapper<T>

Я просто хотел бы причину, почему это происходит? Нам всю жизнь говорят, что мы берем объекты по ссылке, почему тогда стандарт берет объекты-функции по значению, и еще хуже в моем связанном вопросе - делать копии этих объектов? Есть ли какое-то преимущество, которое я не понимаю, чтобы делать это таким образом?

Ответы на вопрос(2)

Ваш ответ на вопрос