内联lambda初始化器可以捕获'this'指针吗?

p2r*_*rkw 20 c++ lambda c++11

可以内联成员初始化lambda捕获并使用this指针吗?

struct A{
  int a = 42;
  int b = [this](){
    return this->a * 4;
  }();
};
Run Code Online (Sandbox Code Playgroud)

它是有效的C++ 11代码(根据规范)还是仅仅是GCC扩展?

如果它有效,为什么我this->在提到会员时必须使用a

Mik*_*our 16

它是有效的c ++ 11代码吗?

不可以.块范围内只有lambdas可以有捕获列表:

C++ 11 5.1.2/9 lambda表达式是一个局部lambda表达式,其最小的封闭范围是块作用域.任何其他lambda-expression在其lambda-introducer中都不应该有一个capture-list.

所以这似乎是GCC扩展.(正如评论中所指出的,这是一个悬而未决的问题,所以很可能有一天成为标准问题.)

为什么我this->在提到会员时必须使用?

你没有,至少我正在使用的GCC版本:http://ideone.com/K857VC.

  • 这是[CWG 1632](http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1632). (4认同)