日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

宏与内联(inline)的区别(转载)

發布時間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 宏与内联(inline)的区别(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先轉載下人家總結的宏和普通函數調用的區別:
(1)、宏只做簡單的字符串替換,函數是參數傳遞,所以必然有參數類型檢查(支持各種類型,而不是只有字符串)。
(2)、宏不經計算而直接替換參數,函數調用則是將參數表達式求值再傳遞給形參。
(3)、宏在編譯前進行,即先替換再編譯。而函數是編譯后,在執行時才調用的。宏占編譯時間,而函數占執行時間。
(4)、宏參數不占空間,因為只做字符串替換,而函數調用時參數傳遞是變量之間的傳遞,形參作為局部變量占內存空間。
(5)、函數調用需要保留現場,然后轉入調用函數執行,執行完畢再返回主調函數,這些耗費在宏中是沒有的。


使用宏和內聯函數都可以節省在函數調用方面的時間和空間開銷。二者都是為了提高效率,但是卻有著顯著的區別:
(1)、在使用時,宏只做簡單的預處理器符號表(字符串)中的簡單替換。而內聯函數可以進行參數類型檢查,且具有返回值(也能被強制轉換為可轉換的合適類型)。
(2)、內聯函數首先是函數,函數的許多性質都適用于內聯函數(如內聯函數可以重載)。
(3)、內聯函數可以作為某個類的成員函數,這樣可以使用類的保護成員和私有成員。而當一個表達式涉及到類保護成員或私有成員時,宏就不能實現了(無法將this指針放在合適位置)。


可以用內聯函數完全替代宏。
但是在使用內聯函數時也要注意:作為內聯函數,函數體必須十分簡單,不能包含循環,條件,選擇等復雜結構,否則不能作為內聯函數。
實際上,編譯器的優化系統會自動將一些簡單函數變成內聯函數。而一些復雜的函數,即使指定為內聯,編譯器也會自動當作普通函數。

?

文章出處:DIY部落(http://www.diybl.com/course/3_program/c++/cppxl/20081216/154041.html)



幸運草 2010-03-04 20:22 發表評論

轉載于:https://www.cnblogs.com/liyuxia713/archive/2010/03/04/2540794.html

總結

以上是生活随笔為你收集整理的宏与内联(inline)的区别(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。