C inline內聯函式使用規則

2021-08-04 03:02:39 字數 1122 閱讀 6555

inline函式的作用

定義:內聯函式避免頻繁呼叫函式對棧記憶體重複開闢所帶來的消耗,但是不能包含複雜的結構控制語句例如while、switch,並且內聯函式本身不能直接呼叫遞迴函式(自己內部還呼叫自己的函式)。

在c++中,為了解決一些頻繁呼叫的小涵數大量消耗棧空間或者是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯函式。

可能說到這裡,很多人還不明白什麼是棧空間,其實棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,如果頻繁大量的使用就會造成因棧空間不足所造成的程式出錯的問題,函式的死迴圈遞迴呼叫的最終結果就是導致棧記憶體空間枯竭。

下面我們來看乙個例子  

#include <iostream>  

#include <string> 

using

namespace

std; 

string dbtest(int a); //函式宣告時可以不用inline,實現時用 

void main() 

cin.get(); 

}   

inline

string dbtest(int a)

//這裡要加上inline

{   return (a%2>0)?"0":"1";

上面的例子就是標準的內聯涵數的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for迴圈的內部所有呼叫dbtest(i)的地方都換成了(i%2>0)?」0」:」1」這樣就避免了頻繁呼叫函式對棧記憶體重複開闢所帶來的消耗。

說到這裡很多人可能會問,既然inline這麼好,還不如把所謂的函式都宣告成inline,嗯,這個問題是要注意的,inline的使用是有所限制的,inline只適合涵數體內**簡單的涵數使用,不能包含複雜的結構控制語句例如while、switch,並且內聯函式本身不能直接呼叫遞迴函式(自己內部還呼叫自己的函式)。

說到這裡我們不得不說一下在c語言中廣泛被使用的#define語句,是的define的確也可以做到inline的這些工作,但是define是會產生***的,尤其是不同型別引數所導致的錯誤,由此可見inline有更強的約束性和能夠讓編譯器檢查出更多錯誤的特性,在c++中是不推薦使用define的。

C inline 內聯函式

內聯函式 1 內聯函式定義和作用 將乙個函式宣告為inline,那麼函式就成為內聯函式。內聯函式通常就是它在程式中每個呼叫點上 內聯地 展開。從定義上看,內聯函式跟一般函式不一樣,一般函式呼叫的時候是需要呼叫開銷的 比如出棧入棧等操作 內聯函式從定義上看更像是巨集,但是跟巨集不一樣。內聯函式的作用主...

C inline內聯函式探索

學過程式編譯的人知道,呼叫函式需要cpu執行引數壓棧 暫存器儲存與恢復 跳轉指令等操作,開銷比較大,高頻繁的呼叫函式對效能有影響,在c c 語言裡產生了macro巨集,由於巨集不是函式不會產生上述開銷,是一種比較好的優化,但巨集不是強型別程式設計,於是vc 產生了inline內聯函式,inline優...

C Inline 內聯函式小結

為解決 中頻繁呼叫小函式,消耗大量棧空間的問題,因而引入修飾符inline。執行速度比常規函式稍快,但以 膨脹為代價 函式內聯,節約的是處理函式呼叫機制的時長。若函式執行時間短,函式內聯的效益較高,反之效益降低 使用限制 1 不可遞迴使用 2 函式體較大的時候不適合使用 3 必須和函式定義放在一起才...