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