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

时间:2011-10-21 10:54:02

标签: php c++ closures c++11

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

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

2 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:0)

不能说php也不能说我的问题100% - 但是...在c ++变量中总共参与了lambda函数的闭包。这个的主要前提是它可以改变它的价值,作为参考。