ima*_*ett 7 c++ lambda shadowing language-lawyer
简单的例子:
class Foo {
int x;
void bar(int x) {
[this]() -> void {
x = 6;
}();
}
};
Run Code Online (Sandbox Code Playgroud)
这不能在GCC,Clang,MVC或ICC上编译(请参见实时).如果我换void bar(int x)了void bar(int y),或者如果我换x = 6;到this->x = 6;那么它工作正常.
这对我来说没有意义.x来自调用的局部变量bar故意不在lambda中捕获.唯一x有意义的是Foo成员变量.
问题:这是预期的行为,如果是这样,请解释原因?
你得到的错误说:
错误:在未指定捕获默认值的情况下,无法在 lambda 中隐式捕获变量“x”
x = 6;
注意:'x'在此声明 void bar(int x) { ^ 注意:lambda 表达式从这里开始 this -> void { ^ 警告:私有字段 'x' 未使用 [-Wunused-private-field] int x;
这让我意识到问题出在变量的定义(或更准确地说,重新定义x)上。您在外部声明它bar()并作为参数声明它。以下代码已编译给我(使用您展示的实时工具):
class Foo {
int x;
void bar() {
[this]() -> void {
x = 6;
}();
}
};
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |