不那么新的C++标准学习笔记 logo 不那么新的C++标准学习笔记

编译器支持最低版本要求:

  • GCC: 7
  • MSVC: 19.1
  • Clang: 3.9

提案: P0018R3

C++11和C++14中,lambda只能捕获this的引用,这在并行程序或异步程序中可能会很难处理好this指向的对象的生命周期,C++17中允许捕获*this,也就是以值类型捕获,lambda就能访问到this指向的对象的另一份拷贝:

struct MyObj {
  int value {123};
  auto getValueCopy() {
    return [*this] { return value; };
  }
  auto getValueRef() {
    return [this] { return value; };
  }
};
MyObj mo;
auto valueCopy = mo.getValueCopy();
auto valueRef = mo.getValueRef();
mo.value = 321;
valueCopy(); // 123
valueRef(); // 321

要注意的是[&,this]这样的写法也是可以的,目的是兼容C++11和C++14的代码,但这样写是多余的,因为[&][=]隐含捕获了this。新的写法可能是[=, *this]

感觉不错,小额赞助一下!

Hosted by Github Pages, 本站由 @missdeer 创建,由 Jekyll 于 2019-05-07 生成,感谢 CloudCannon 制作的theme: Edition ,感谢 Let's Encrypt 提供免费的SSL证书服务。本站点采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。© 2019