導航:首頁 > 源碼編譯 > inline函數在編譯時不做類型檢查

inline函數在編譯時不做類型檢查

發布時間:2025-01-11 09:41:35

1. inline 和 宏定義的區別

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)宏定義時要注意書寫(參數要括起來)否則容易出現歧義,內聯函數不會產生歧義;

閱讀全文

與inline函數在編譯時不做類型檢查相關的資料

熱點內容
mysql查看配置命令 瀏覽:597
v8編譯cmake 瀏覽:964
app品牌起步階段需要什麼營銷 瀏覽:358
壓縮機製冷劑溫度 瀏覽:930
會日語的程序員 瀏覽:19
網銀密碼加密失敗怎麼回事 瀏覽:727
android開發音樂播放器 瀏覽:808
ug120陣列命令快捷鍵 瀏覽:597
氣動隔膜式壓縮機 瀏覽:470
linux如何修改主機名 瀏覽:104
單片機游標上下移動 瀏覽:528
數據加密驗證 瀏覽:108
程序員被激怒 瀏覽:891
winxp找不到伺服器dns地址 瀏覽:842
以文本文件的格式保存考生文件夾 瀏覽:41
編譯原理文法分為幾類 瀏覽:570
JAVA基礎學python要多久 瀏覽:74
java流量控制 瀏覽:936
java實現多重繼承 瀏覽:707
票據通加密狗怎麼在新系統上使用 瀏覽:795