相关疑难解决方法(0)

为什么C++ 11的lambda默认需要"可变"关键字用于按值捕获?

简短的例子:

#include <iostream>

int main()
{
    int n;
    [&](){n = 10;}();             // OK
    [=]() mutable {n = 20;}();    // OK
    // [=](){n = 10;}();          // Error: a by-value capture cannot be modified in a non-mutable lambda
    std::cout << n << "\n";       // "10"
}
Run Code Online (Sandbox Code Playgroud)

问题:为什么我们需要mutable关键字?它与传统参数传递给命名函数有很大不同.背后的理由是什么?

我的印象是,按值捕获的整个点是允许用户更改临时值 - 否则我几乎总是更好地使用按引用捕获,不是吗?

有什么启示吗?

(顺便说一句,我使用的是MSVC2010.这应该是标准的AFAIK)

c++ lambda c++11

249
推荐指数
11
解决办法
6万
查看次数

标签 统计

c++ ×1

c++11 ×1

lambda ×1