內聯函式與巨集定義

2021-09-27 11:30:37 字數 789 閱讀 7670

1、內聯函式取消了引數的壓棧,減少呼叫的開銷

2、內聯函式宣告必須和定義一起,如果只有宣告,編譯器只會將它看做普通函式的宣告,如果宣告的時候使用inline,定義在其他地方也用inline,那麼它是內聯還是普通函式:普通函式。查彙編**,內聯函式與普通函式一樣???

3、c++類中定義的函式都預設是內聯函式,無論是否有inline

4、如果內聯函式太大,就會用普通函式的呼叫方法來呼叫它。內聯函式不支援遞迴

5、在類中宣告定義的函式是隱式內聯;類中宣告,內外定義的看定義時有沒有加inline,沒加的就不是內聯

內聯函式的替換是在編譯階段,巨集定義的替換是在預編譯階段。

內聯函式會進行型別檢查(編譯階段才會進行型別檢查),巨集定義函式不會進行型別檢查。

6、內聯函式無法獲取他的位址,不能用函式指標??猜測:內聯函式在編譯時確定作替換,函式指標在執行時確定執行哪個函式。

7、如果類中的函式都是隱式內聯,那麼析構,構造,虛函式都可以內聯了,?

不會報錯,語法上正確,但是是否真的內聯了取決具體函式。

內聯函式的引數中,表示式和函式只會被執行一次,巨集定義函式中可能會被執行多次。???

內聯函式的執行順序和正常函式一樣,巨集定義函式替換後,表示式的執行順序可能會有不同(只做替換,不進行計算,將**替換進去後與原**一起執行)。

內聯函式不一定會被替換,如果**過於複雜,編譯器將不進行替換。而巨集定義一定會被替換。

內聯函式一定是完整的邏輯,上文中的變數需要引數傳遞;而巨集定義因為只是替換,因此邏輯可以不完整,只需要替換之後整個程式的邏輯是完整的即可。

內聯函式與巨集定義

用內聯取代巨集 1.內聯可除錯 2.可進行型別安全檢查或自動型別轉換 3.可訪問成員變數。另外,定義在類宣告中的成員函式自動轉化為內聯函式。內聯函式與巨集定義 在c中,常用預處理語句 define來代替乙個函式定義。例如 define max a,b a b a b 該語句使得程式中每個出現max ...

巨集定義與內聯函式

1 巨集定義的規則和使用解析 1 巨集定義的解析規則就是 在預處理階段由預處理器進行替換,這個替換是原封不動的替換。2 巨集定義替換會遞迴進行,直到替換出來的值本身不再是乙個巨集為止。3 乙個正確的巨集定義式子本身分為3部分 第一部分是 dedine 第二部分是巨集名 剩下的所有為第三部分。4 巨集...

內聯函式與巨集定義

一 巨集定義和內聯函式的區別 1.巨集定義不是函式,但是使用起來像函式。預處理器用複製巨集 的方式代替函式的呼叫,省去了函式壓棧退棧過程,提高了效率。內聯函式本質上是乙個函式,內聯函式一般用於函式體的 比較簡單的函式,不能包含複雜的控制語句,while switch,並且內聯函式本身不能直接呼叫自身...