如何使const成为可变的lambda捕获列表的某些成员?

时间:2018-12-30 14:11:29

标签: c++ lambda const mutable const-correctness

mutable lambda可以更改其捕获列表成员的值(按值捕获)。有什么方法可以使捕获列表的某些成员保留在const lambda中的mutable

例如我想更改i,但在the following code sampleconst的正文中有j lambda

#include <iostream>

int main()
{
    int i = 42;
    int j = 108;
    auto lambda = [i, j]() mutable
    {
        i = 15;
        std::cout << "i = " << i << std::endl;
        std::cout << "j = " << j << std::endl;
    };

    lambda();
}

1 个答案:

答案 0 :(得分:2)

由于简单的捕获具有它们捕获的事物的确切的,具有cv限定的类型,因此您可以使外部变量const从而获得const捕获:

#include <iostream>

int main()
{
    const int i = 42;
//  ^^^^^

    int j = 108;
    auto lambda = [i, j]() mutable
    {
        i = 15;
        std::cout << "i = " << i << std::endl;
        std::cout << "j = " << j << std::endl;
    };

    lambda();
}

当然,如果您需要在某个时候修改外部变量,则需要先对其进行复制-或以某种方式重构代码以使其更加整洁。