C++類的未命名物件用法
阿新 • • 發佈:2019-08-07
當我們編寫一個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時就會“呼叫”這一物件,此時該物件將呼叫運算子的函式