为什么是C++;11和PHP闭包需要声明闭包覆盖变量吗? C++和PHP中的函数文字都要求程序员从当前的词汇上下文中指定它们使用的变量。这一要求背后的原因是什么

为什么是C++;11和PHP闭包需要声明闭包覆盖变量吗? C++和PHP中的函数文字都要求程序员从当前的词汇上下文中指定它们使用的变量。这一要求背后的原因是什么,php,c++,closures,c++11,Php,C++,Closures,C++11,我想这不是针对编译器/解释器的,因为可以从函数文本的主体静态地推断出这些信息。它只是为了引起读者的注意吗?至少对于C++11,[=](){…}将自动引入函数体使用的所有且仅限于那些局部变量。(或者,同样地,[&]…) 您可以指定要通过引用或通过值捕获的单个变量,如果您有任何超出此“一网打尽”的特定需求 在PHP中,变量是在第一次使用它们的名称时创建的,因此我希望声明能够确保没有新变量屏蔽旧变量。有点像 Global 关键字。 < P>不能说是PHP,也不是我得到的问题100%……但是……C++中

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

至少对于C++11,
[=](){…}
将自动引入函数体使用的所有且仅限于那些局部变量。(或者,同样地,
[&]…

您可以指定要通过引用或通过值捕获的单个变量,如果您有任何超出此“一网打尽”的特定需求


在PHP中,变量是在第一次使用它们的名称时创建的,因此我希望声明能够确保没有新变量屏蔽旧变量。有点像<代码> Global 关键字。

< P>不能说是PHP,也不是我得到的问题100%……但是……C++中的变量完全共享在lambda函数闭包中。其主要前提是,它可以改变其价值,作为参考