繁体   English   中英

将函数的引用和lambda表达式作为参数传递时有什么区别?

[英]What is the difference when passing function's reference and lambda expression as arguments?

我在对priority_queue使用自定义比较器,发现了不同的行为。 我已经知道stl容器需要将特定类型传递给模板声明。 使用正常功能时,应为:

bool cmp(pair<int, int> &lhs, pair<int, int> &rhs) {
    return lhs.first > rhs.first;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> pq1(v.begin(), v.end(), cmp);

但是当使用lambda时,我发现正确的方法是:

auto comp = [](const pair<int, int>& lhs, const pair<int, int>& rhs){return lhs.second < rhs.second;};
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(comp)> pq2(v.begin(), v.end(), comp);

我提到decltype,但没有发表意见。 有人可以解释编译器如何处理decltype(&function)decltype(lambda)吗?

这是因为lambda表达式会创建一个(匿名类的) 对象

如果使用&comp则将获得指向该对象的指针,该指针不可调用。


你拥有的lambda基本上等于

struct
{
    bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs)
    {
        return lhs.second < rhs.second;
    }
} comp;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM