1. 程式人生 > >C++類的未命名物件用法

C++類的未命名物件用法

當我們編寫一個lambda後,編譯器將表示式翻譯成一個未命名類的未命名物件。在lambda表示式產生的類中含有一個過載的函式呼叫運算子,例如對於我們傳遞給stable_sort作為最後一個實參的lambda表示式來說:

vector<string> words;
// 其它程式碼

// 根據單的長度對其進行排序,對於長度相同的單詞按照字母順序排序
stable_sort(words.begin(), words.end(),
        [](const string &a, const string &b)
            {return a.size() < b.size();});

其行為類似於下面這個類的一個未命名物件

class ShorterString {
public:
    bool operator() (const string &a, const string &b) const{
        return a.size() < b.size();
    }
};

產生的類只有一個函式呼叫運算子成員,它負責接受兩個string並比較它們的長度,它的形參列表和函式列體與lambda表示式完成一樣。用這個類替代lambda表示式後:

stable_sort(words.begin(), words.end(), ShorterString());

第三個實 參是新構建的ShorterString物件,當stable_sort內部的程式碼每次比較兩個string時就會“呼叫”這一物件,此時該物件將呼叫運算子的函式