#cpp #lambda
Как правильно захватывать глобальные переменные в лямбде? Хочу использовать следующим образом, но выдаются предупреждения. Как их подавить? #include#include #include #include int offset = 1; int scale = 2; int main() { auto shift = [&offset, scale](int b) { return (offset + b) * scale; }; std::vector values = {1, 2, 3, 4, 5}; std::transform(values.cbegin(), values.cend(), std::ostream_iterator {std::cout}, shift); }
Ответы
Ответ 1
Глобальные переменные, как и статические, нет необходимости (и не разрешается) захватывать. Их можно использовать в лямбдах без захвата. Если очень хочется иметь в лямбде копию переменной (например если лямбда - mutable, и эту копию хочется изменять), то можно использовать захват с инициализацией: [offset_copy = offset, scale_copy = scale](int b) /*...*/.
Комментариев нет:
Отправить комментарий