C++和PHP中的函数字面值要求程序员指定它们从当前词法上下文中使用哪些变量。这个要求背后的原因是什么呢?
我猜这不是为了编译器/解释器,因为可以从函数字面值的主体静态推断出这些信息。难道只是为了吸引读者的注意力吗?
至少对于C++11来说,[=] () {...}
会自动引入函数体使用的所有局部变量,且仅限这些变量。(或者,等价地, [&]...
)
如果您需要特别指定某些变量,以按值或按引用进行捕获,那么可以超越此总括性规则。
在PHP中,变量在首次使用它们的名称时被创建,因此我认为声明是为了确保没有新变量掩盖旧变量。有点像global
关键字。
嗯,我不能确定PHP方面的情况,也没有完全理解你的问题 - 但是在C++中,变量total可以参与lambda函数闭包。这个主要前提是它可以改变自己的值,因为它是一个引用。