我想知道这是标准版还是代码中的错误。我正在尝试比较一对我自己开发的函数对象。如果函数对象的类型不相同,我拒绝比较,所以我知道两个lambda是相同的类型。那么他们为什么不能比较呢?
答案 0 :(得分:3)
每个C ++ 0x lambda对象都有一个不同的类型,即使签名是相同的。
auto l1=[](){}; // one do-nothing lambda
auto l2=[](){}; // and another
l1=l2; // ERROR: l1 and l2 have distinct types
如果两个C ++ 0x lambda具有相同的类型,则它们必须来自同一行代码。当然,如果它们捕获变量,那么它们不一定是相同的,因为它们可能来自不同的调用。
但是,C ++ 0x lambda没有任何比较运算符,因此您无法比较实例以查看它们是否确实相同,或者只是相同的类型。当你考虑它时,这是有道理的:如果捕获的变量没有比较运算符,那么你就无法比较该类型的lambdas,因为每个副本对于捕获的变量可能有不同的值。
答案 1 :(得分:0)
是否为lambda对象重载了相等运算符?如果不是,我假设您需要实施它。