mutable
lambda可以更改其捕获列表成员的值(按值捕获)。有什么方法可以使捕获列表的某些成员保留在const
lambda中的mutable
?
例如我想更改i
,但在the following code sample的const
的正文中有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();
}
答案 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();
}
当然,如果您需要在某个时候修改外部变量,则需要先对其进行复制-或以某种方式重构代码以使其更加整洁。