回覆列表
  • 1 # 變餅檔

    inline函式是C++引入的機制,目的是解決使用宏定義的一些缺點。

    1.為什麼要引入行內函數(行內函數的作用)

    用它替代宏定義,消除宏定義的缺點。宏定義使用預處理器實現,做一些簡單的字元替換因此不能進行引數有效性的檢測。另外它的返回值不能被強制轉換為可轉換的合適型別,且C++中引入了類及類的訪問控制,在涉及到類的保護成員和私有成員就不能用宏定義來操作。

    2.inline相比宏定義有哪些優越處

    (1)inline函式程式碼是被放到符號表中,使用時像宏一樣展開,沒有呼叫的開銷效率很高;

    (2)inline函式是真正的函式,所以要進行一系列的資料型別檢查;

    (3)inline函式作為類的成員函式,可以使用類的保護成員及私有成員;

    3.inline函式使用的場合

    (1)使用宏定義的地方都可以使用inline函式;

    (2)作為類成員介面函式來讀寫類的私有成員或者保護成員;

    4.為什麼不能把所有的函式寫成inline函式

    行內函數以程式碼複雜為代價,它以省去函式呼叫的開銷來提高執行效率。所以一方面如果行內函數體內程式碼執行時間相比函式呼叫開銷較大沒有太大的意義;另一方面每一處行內函數的呼叫都要複製程式碼,消耗更多的記憶體空間,因此以下情況不宜使用行內函數。

    (1)函式體內的程式碼比較長,將導致記憶體消耗代價;

    (2)函式體內有迴圈,函式執行時間要比函式呼叫開銷大;

    另外類的構造與解構函式不要寫成行內函數。

    5.行內函數與宏定義區別

    (1)行內函數在編譯時展開,宏在預編譯時展開;

    (2)行內函數直接嵌入到目的碼中,宏是簡單的做文字替換;

    (3)行內函數有型別檢測、語法判斷等功能,而宏沒有;

    (4)inline函式是函式,宏不是;

    (5)宏定義時要注意書寫(引數要括起來)否則容易出現歧義,行內函數不會產生歧義;

  • 中秋節和大豐收的關聯?
  • 推薦1000左右山地車?