C ++ 0x lambda按值捕获总是const?

时间:2010-05-14 16:03:35

标签: c++ lambda const c++11

有没有办法按值捕获,并使捕获的值非常量?我有一个我想要捕获的库函子&调用一个非常量但应该是的方法。

以下不编译,但使foo :: operator()const修复它。

struct foo
{
  bool operator () ( const bool & a )
  {
    return a;
  }
};


int _tmain(int argc, _TCHAR* argv[])
{
  foo afoo;

  auto bar = [=] () -> bool
    {
      afoo(true);
    };

  return 0;
}

2 个答案:

答案 0 :(得分:132)

使用mutable。


auto bar = [=] () mutable -> bool ....

如果没有mutable,则声明lambda对象const的operator()。

答案 1 :(得分:-4)

有另外一种方法可以使用 mutable (Crazy Eddie提出的解决方案)。

使用 [=] ,您的块会按值捕获所有对象。您可以使用 [&] 按引用捕获所有对象:

auto bar = [&] () -> bool

或者您只能通过引用捕获某些对象 [=,& afoo]

auto bar = [=, &afoo] () -> bool

有关详细信息,请参阅此页(说明部分): http://en.cppreference.com/w/cpp/language/lambda