gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:25:40 25 4
gpt4 key购买 nike

我正在对 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 expressions创建一个对象(匿名类的)。

如果你使用 &comp 那么你会得到一个指向对象的指针,它是不可调用的。


你的lambda基本上等同于

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

关于c++ - 将函数的引用和 lambda 表达式作为参数传递时有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48881871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com