为什么C++ 11和PHP闭包需要声明封闭变量?

Aiv*_*var 7 php c++ closures c++11

C++和PHP中的函数文字要求程序员从当前词法上下文中指定它们使用的变量.这个要求背后的原因是什么?

我想这不适用于编译器/解释器,因为可以从函数文字的主体中静态地推断出这些信息.它只是为了引起读者的注意吗?

spr*_*aff 10

至少对于C++ 11,[=] () {...}将自动拉入函数体使用的所有局部变量.(或者,同样地[&]...)

如果您有超出此catch-all的任何特定需求,则可以指定要通过引用或值捕获的各个变量.

在PHP中,变量是在第一次使用它们的名字时创建的,所以我希望声明是为了确保没有新变量掩盖旧变量.有点像global关键字.

  • @bstamour - 事实上,明确指定捕获哪些变量的能力可以用于防止_inadvertently_捕获的变量(例如,使用从其他地方复制粘贴的长表达式),这在捕获时当然特别重要通过参考完成... (2认同)