【问题标题】:Why C++11 and PHP closures require declaring the closed-over variables?为什么 C++11 和 PHP 闭包需要声明封闭变量?
【发布时间】:2011-12-12 12:02:30
【问题描述】:

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

我猜它不适合编译器/解释器,因为可以从函数字面量的主体中静态推断出这些信息。只是为了吸引读者的注意力吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 好的,如果是 PHP,它(几乎)是有意义的。
    • 一切都是关于使用 C++ 进行控制的。我喜欢它如何让你控制你的闭包。
    • @bstamour -- 事实上,明确指定捕获哪些变量的能力可能有助于防止无意捕获的变量(例如,使用复制的长表达式从其他地方粘贴),这在通过引用完成捕获时当然特别重要......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2019-12-26
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多