代码之家  ›  专栏  ›  技术社区  ›  yesraaj

C++ 0x-lambda表达式看起来与java的匿名内部类相同吗?

  •  6
  • yesraaj  · 技术社区  · 14 年前

    我在c++和Java环境下对lambda表达式的解释是否正确?

    3 回复  |  直到 13 年前
        1
  •  5
  •   Johannes Schaub - litb    14 年前

    它们不完全一样。两者都创建了未命名的类,但它们的相似性到此为止。

    在C++中,创建一个闭包,可以通过引用来捕获本地变量。在Java中,您只需获得当前局部变量值的快照(这些变量必须是“final”)。

    匿名内部类的目的是扩展另一个类或实现另一个临时接口。因此,匿名内部类可以在某种程度上模拟lambda表达式的工作,例如通过实现 Runnable 接口。Lambda表达式是专门设计用来调用并可能修改其环境中的局部变量的。

        2
  •  5
  •   Daniel Earwicker    14 年前

    Java匿名内部类可以引用 final 全部的 封闭类中的数据(包括可变的)。因此,匿名类中的方法不能更改封闭方法中变量的值,但可以更改封闭类中成员的值。

    一个C++ lambda可以参考 数据(包括可变的)在封闭函数中,如果它嵌套在成员函数中,那么它可以对封闭类的数据执行相同的操作。对封闭范围的精确依赖程度由程序员声明,因此它是显式的而不是隐式的。

    与C#lambdas相比,C#lambdas没有限制,所有依赖项都是隐式的。这使得它们成为这些特性中最不冗长的(也得益于它们具有最好的类型推断)。但在缺点方面,它们使所有关于线程的简单规则无效,即局部变量不一定是“在线程堆栈上”,因此在访问之前不需要锁定。

        3
  •  2
  •   Andreas Dolk    14 年前

    未命名方法 未命名类 . 所以他们没有名字,但概念不同。

    顺便说一句- wikipedia 提到,只有lambda 功能