Определена ли реализация, какие алгоритмы могут принимать изменчивую лямбду?

я нашел Вот что лямбды захвачены ценностью. Это означает, что если алгоритм внутренне использует второй алгоритм, который принимает значение лямбды по значению, любое изменяемое состояние лямбда не будет сохранено. Я буду публиковать мой пример связанных вопросов здесь:

remove_if(begin(values), end(values), [i = 0U, it = cbegin(intervals), end = cend(intervals)](const auto&) mutable {
return it != end && ++i > it->first && (i <= it->second || (++it, true));
})

Итак, на момент написания моего первоначального вопроса remove_if имело определенное поведение для реализации mutable лямбда. Есть ли список других функций, которые определены реализацией?

2

Решение

Да, это.
См. [Алгоритмы. Требования]:

http://eel.is/c++draft/algorithms#requirements-9

[Примечание: если не указано иное, алгоритмы, которые принимают функциональные объекты в качестве аргументов, могут свободно копировать эти функциональные объекты. Программистам, для которых важна идентификация объекта, следует рассмотреть возможность использования класса-обертки, который указывает на некопированный объект реализации, такой как reference_wrapper, или какое-либо эквивалентное решение. — конец примечания]
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]