A. C++內聯函數在 在編譯時是將該函數的目標代碼插入每個調用該函數的地方
內聯函數在調用時,是將調用表達式用內聯函數體來替換,而一般函數進行調用時,要將程序執行權轉到被調用函數中,然後再返回到調用它的函數中。
如果內聯失敗這個函數就是一個普通的函數,普通的函數不會被編譯器展開,只是作為函數調用。內聯函數比普通函數效率高的原因就是編譯器在調用處把這個函數展開,展開就是直接執行代碼而不是調用這個函數,像宏展開的意思。
(1)內聯是在運行時還是在編譯時擴展閱讀:
宏調用並不執行類型檢查,甚至連正常參數也不檢查,但是函數調用卻要檢查。C語言的宏使用的是文本替換,可能導致無法預料的後果,因為需要重新計算參數和操作順序。在宏中的編譯錯誤很難發現,因為它們引用的是擴展的代碼,而不是程序員鍵入的。
許多結構體使用宏或者使用不同的語法來表達很難理解。內聯函數使用與普通函數相同的語言,可以隨意的內聯和不內聯。
B. C++內聯函數具體有什麼作用
內聯函數可減少cpu的系統開銷,並且程序的整體速度將加快,但當內聯函數很大時,會有相反的作用,因此一般比較小的函數才使用內聯函數。
內聯函數是C++的增強特性之一,用來降低程序的運行時間。當內聯函數收到編譯器的指示時,即可發生內聯:編譯器將使用函數的定義體來替代函數調用語句,這種替代行為發生在編譯階段而非程序運行階段。
值得注意的是,內聯函數僅僅是對編譯器的內聯建議,編譯器是否覺得採取你的建議取決於函數是否符合內聯的有利條件。如何函數體非常大,那麼編譯器將忽略函數的內聯聲明,而將內聯函數作為普通函數處理。
內聯函數具有一般函數的特性,它與一般函數所不同之處公在於函數調用的處理。一般函數進行調用時,要將程序執行權轉到被調用函數中,然後再返回到調用它的函數中;而內聯函數在調用時,是將調用表達式用內聯函數體來替換。在使用內聯函數時,應注意如下幾點:
1、類內定義的函數是內聯函數,類外定義的函數是非內聯函數(短函數可以定義在類內,長函數可以定義在類外)。
2、可以為類外定義的函數指定 inline 關鍵字,強行為內聯函數。
3、在內聯函數內不允許用循環語句和開關語句。
4、內聯函數的定義必須出現在內聯函數第一次被調用之前。