我目前正在使用 c++11 lambdas 并找到一个我无法理解的示例。根据标准:
最小封闭范围是块范围 (3.3.3) 的 lambda 表达式是本地 lambda 表达式;任何其他 lambda-expression 在其 lambda-introducer 中都不应有捕获列表
所以,我创建了一个简单的例子:
int a = 10;
auto x = [a] { return 1;};
int main() {
int k = 5;
auto p = [k]{ return k; };
return 0;
}
ideone中的代码:http: //ideone.com/t9emu5
我期待这段代码不会编译,因为在非块范围内捕获变量(或者至少认为 auto x = ... 部分不在块范围内)。但是代码正在编译 - 可以吗?
如果可以 - 块范围是什么?
(我不确定我使用的是什么编译器版本,因为目前我只能访问 ideone 站点。
感谢您的解释!