簡體   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