可以内联成员初始化lambda捕获并使用this
指针吗?
struct A{
int a = 42;
int b = [this](){
return this->a * 4;
}();
};
它是有效的C ++ 11代码(根据规范)还是只是一个GCC扩展?
如果有效,为什么在提及成员this->
时我必须使用a
?
答案 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。