为什么是C++;11和PHP闭包需要声明闭包覆盖变量吗? C++和PHP中的函数文字都要求程序员从当前的词汇上下文中指定它们使用的变量。这一要求背后的原因是什么
我想这不是针对编译器/解释器的,因为可以从函数文本的主体静态地推断出这些信息。它只是为了引起读者的注意吗?至少对于C++11,为什么是C++;11和PHP闭包需要声明闭包覆盖变量吗? C++和PHP中的函数文字都要求程序员从当前的词汇上下文中指定它们使用的变量。这一要求背后的原因是什么,php,c++,closures,c++11,Php,C++,Closures,C++11,我想这不是针对编译器/解释器的,因为可以从函数文本的主体静态地推断出这些信息。它只是为了引起读者的注意吗?至少对于C++11,[=](){…}将自动引入函数体使用的所有且仅限于那些局部变量。(或者,同样地,[&]…) 您可以指定要通过引用或通过值捕获的单个变量,如果您有任何超出此“一网打尽”的特定需求 在PHP中,变量是在第一次使用它们的名称时创建的,因此我希望声明能够确保没有新变量屏蔽旧变量。有点像 Global 关键字。 < P>不能说是PHP,也不是我得到的问题100%……但是……C++中
[=](){…}
将自动引入函数体使用的所有且仅限于那些局部变量。(或者,同样地,[&]…
)
您可以指定要通过引用或通过值捕获的单个变量,如果您有任何超出此“一网打尽”的特定需求
在PHP中,变量是在第一次使用它们的名称时创建的,因此我希望声明能够确保没有新变量屏蔽旧变量。有点像<代码> Global 关键字。 < P>不能说是PHP,也不是我得到的问题100%……但是……C++中的变量完全共享在lambda函数闭包中。其主要前提是,它可以改变其价值,作为参考好的,在PHP的情况下(几乎)是有意义的,它是关于C++的控制。我喜欢它让您控制闭包的方式。@bstamour——事实上,显式指定捕获哪些变量的功能对于防止意外捕获变量(例如,使用从其他地方复制粘贴的长表达式)非常有用,当然,当通过引用进行捕获时,这一点尤其重要……似乎有一个SO帐户。