可以内联lambda初始化器捕获'这个'指针?

时间:2014-09-19 12:51:30

标签: c++ c++11 lambda

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

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

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

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

1 个答案:

答案 0 :(得分:16)

  

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

没有。块范围中只有lambdas可以有捕获列表:

  

C ++ 11 5.1.2 / 9 lambda-expression 其最小的封闭范围是块范围是本地lambda表达式;任何其他 lambda-expression 在其 lambda-introducer 中不得有 capture-list

所以这似乎是GCC扩展。 (正如评论中所指出的,这是一个open issue,所以很可能有一天成为标准。)

  

为什么我在引用成员a时必须使用this->

你不是,至少我使用的是GCC的版本:http://ideone.com/K857VC