【问题标题】:C++0x lambda capture by value always const?C ++ 0x lambda按值捕获总是const?
【发布时间】:2011-02-19 14:35:00
【问题描述】:

有什么方法可以按值捕获,并使捕获的值非常量?我有一个库函子,我想捕获并调用一个非常量但应该是的方法。

以下内容无法编译,但将 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;
}

【问题讨论】:

    标签: c++ lambda constants c++11


    【解决方案1】:

    使用可变的。

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

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

    【讨论】:

      【解决方案2】:

      还有使用 mutable 的替代方法(Crazy Eddie 提出的解决方案)。

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

      auto bar = [&] () -> bool
      

      或者您可以通过引用仅捕获某些对象[=, &afoo]

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

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

      【讨论】:

      • 这完全不同。它们不可互换。这没有回答 OP 的问题。
      • 这个解决方案的问题是它对捕获的局部变量在执行lambda之前销毁(例如,当你启动一个分离的std::thread时)不起作用。
      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      相关资源
      最近更新 更多