C lambda运算符==

前端之家收集整理的这篇文章主要介绍了C lambda运算符==前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何比较C(Visual Studio 2010)中的两个lambda函数
std::function<void ()> lambda1 = []() {};
std::function<void ()> lambda2 = []() {};
bool eq1 = (lambda1 == lambda1);
bool eq2 = (lambda1 != lambda2);

我得到一个编译错误,声称operator ==是不可访问的.

编辑:我试图比较函数实例.所以lambda1 == lambda1应该返回true,而lambda1 == lambda2应返回false.

解决方法

您无法比较std :: function对象,因为 std::function is not equality comparable. lambda的闭包类型也不相等.

但是,如果你的lambda没有捕获任何东西,那么lambda本身就可以被转换成一个函数指针,而函数指针是相等的(但是据我所知,这是完全没有指定的,不管这个例子中is_1and2_equal是true还是false)

void(*lambda1)() = []() { };
void(*lambda2)() = []() { };
bool are_1and1_equal = (lambda1 == lambda1); // will be true
bool are_1and2_equal = (lambda1 == lambda2); // may be true?

Visual C++ 2010 does not support this conversion.直到Visual C被释放之前,转换没有添加到C 0x.

原文链接:https://www.f2er.com/c/116295.html

猜你在找的C&C++相关文章