我目前与C++ 11个lambda表达式玩,我发现我无法理解一个例子。根据标准:非本地Lambda和捕捉变量 - 什么是“块范围”是指
A lambda-expression whose smallest enclosing scope is a block scope (3.3.3) is a local lambda expression; any other lambda-expression shall not have a capture-list in its lambda-introducer
所以,我创建了简单的例子:http://ideone.com/t9emu5
我期待这个代码将不会因为在拍摄变量的编译:
int a = 10;
auto x = [a] { return 1;};
int main() {
int k = 5;
auto p = [k]{ return k; };
return 0;
}
在ideone代码非块范围(或者至少认为auto x = ...部分不在块范围内)。但代码正在编译 - 可以吗?
如果是正常 - 块范围是什么?
(我不知道我所用的编译器版本,因为目前我只有ideone站点的访问。
感谢解释!
那么,什么范围是非块范围? – matekm
@DanielFrey Huh?一个块是一个复合语句,而一个名称空间当然不是一个块。请参阅[basic.scope.block]/1和[stmt.block] – dyp
@DyP对不起,我感到困惑。你完全正确! –