[英]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.