14.1 函數調用運算符
基本情況
- 重載的運算符:()
- 該類的對象爲函數對象,可以用作泛型算法的實參
與lambda表達式的關係
- lambda表達式中的形參是函數對象的數據成員
- lambda表達式中的捕獲列表是函數對象的形參
- lambda表達式很方便,當某個操作不經常使用又很簡單時,可用lambda來代替函數對象
標準庫中的函數對象
- 頭文件:functional
- 模式:模板
- 注意點
- 在定義優先隊列等適配器時,需同時聲明隊列的默認容器,且不加函數對象的調用運算符
- 在使用泛型算法時,需加函數對象的調用運算符
三種表達函數方式的整合
- 頭文件:functional
- 關鍵字:function
- 函數的三種表達方式
- 普通函數
- 函數對象
- lambda表達式
- 要求:function是模板,必須提供函數的有關信息(簽名)
注:如果因爲重載函數而出現二義性,可通過存儲函數指針或生成一個lambda表達式完成。
14.2 類型轉換運算符
基本情況
- 形式:operator type()
- 要求:可以轉換成指針和引用,但不能直接轉換成數組或函數。
注:類型轉換不能過度定義
顯示的類型轉換
- 問題:沒有定義相關操作的對象,可能通過類型轉換產生意想不到的結果。
- 方法:在定義時註明explicit,表明必須通過靜態轉換才能實現。
對於重載的運算符,無論是成員或非成員函數,都在匹配範圍內。