C++primer 第十四章筆記 初稿

14.1 函數調用運算符

  1. 基本情況

    • 重載的運算符:()
    • 該類的對象爲函數對象,可以用作泛型算法的實參
  2. 與lambda表達式的關係

    • lambda表達式中的形參是函數對象的數據成員
    • lambda表達式中的捕獲列表是函數對象的形參
    • lambda表達式很方便,當某個操作不經常使用又很簡單時,可用lambda來代替函數對象
  3. 標準庫中的函數對象

    • 頭文件:functional
    • 模式:模板
    • 注意點
      • 在定義優先隊列等適配器時,需同時聲明隊列的默認容器,且不加函數對象的調用運算符
      • 在使用泛型算法時,需加函數對象的調用運算符
  4. 三種表達函數方式的整合

    • 頭文件:functional
    • 關鍵字:function
    • 函數的三種表達方式
      • 普通函數
      • 函數對象
      • lambda表達式
    • 要求:function是模板,必須提供函數的有關信息(簽名)

    注:如果因爲重載函數而出現二義性,可通過存儲函數指針或生成一個lambda表達式完成。

14.2 類型轉換運算符

  1. 基本情況

    • 形式:operator type()
    • 要求:可以轉換成指針和引用,但不能直接轉換成數組或函數。

    注:類型轉換不能過度定義

  2. 顯示的類型轉換

    • 問題:沒有定義相關操作的對象,可能通過類型轉換產生意想不到的結果。
    • 方法:在定義時註明explicit,表明必須通過靜態轉換才能實現。
  3. 對於重載的運算符,無論是成員或非成員函數,都在匹配範圍內。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章