Страницы

Поиск по вопросам

понедельник, 30 марта 2020 г.

Захват глобальных переменных лямбдой

#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) /*...*/.

Комментариев нет:

Отправить комментарий