一般函數在進行調用時,要將程序執行權轉到被調用函數中,然后再返回到調用它的函數中,而內聯函數在調用時,是將調用表達式用內聯函數體來替換,而不是定義在另一個函數體內(也就是編譯器很生硬的將內聯函數里面的執行語句“搬”到調用的地方),所以內聯函數在調用時不發生控制權轉移。
注意:
類 內部實現的函數都是內聯函數,可以不用inline定義類 外部定義的函數必須加inline定義
對于內聯函數,記住下面的結論即可:
結論中的第2條:內聯函數只是一種請求,編譯器不一定不一定允許這種請求,換句話說,編譯系統并非對內聯函數必須使用內聯,而是根據具體情況決定。
由圖可以發現,使用++a作為函數參數,使得宏替換和內聯函數出現了2種截然不同的結果。
宏替換時,編譯器非常機械的將2個變量進行替換,在此題的三目運算符中,第一個判斷過后,a又再加了一次,因此得到的c也是3。
所以,一般情況下,盡量不要使用++a這種作為函數參數。
新聞熱點
疑難解答