【发布时间】:2017-10-20 17:44:55
【问题描述】:
简单示例:
class Foo {
int x;
void bar(int x) {
[this]() -> void {
x = 6;
}();
}
};
这不能在 GCC、Clang、MVC 或 ICC (see it live) 上编译。如果我将void bar(int x) 更改为void bar(int y),或者如果我将x = 6; 更改为this->x = 6;,那么它工作正常。
这对我来说没有意义。来自对 bar 的调用的局部变量 x 故意不在 lambda 中捕获。唯一有意义的x 是Foo 的成员变量。
问题:这是预期的行为吗?如果是,请解释原因?
【问题讨论】:
-
也许标签 language-lawyer 可能合适?
-
编译器失败时会说什么?
-
在问题中包含相关错误。
-
在您的情况下,
x=6引用了bar(int x)的x。而你只是没有捕捉到它,仅此而已。我的意思是:那么这种歧义被视为错误。但仍然 +1 -
看来问题的要点是
x = 6;中的x是否应该查找bar的参数,或者类成员。我找不到标准涵盖的地方
标签: c++ lambda language-lawyer shadowing