c 中行內函數有什麼用處,具體該怎麼用

2021-05-01 13:59:07 字數 3500 閱讀 8684

1樓:匿名使用者

行內函數必須是和函式體申明在一起,才有效。像這樣的申明inline tablefunction(int i)是沒有效果的,編譯器只是把函式作為普通的函式申明,我們必須定義函式體。

inline tablefunction(int i) ;

這樣我們才算定義了一個行內函數。我們可以把它作為一般的函式一樣呼叫。但是執行速度確比一般函式的執行速度要快。

我們也可以將定義在類的外部的函式定義為行內函數,比如:

class tableclass;

inline int dec()

int getnum();

}inline int tableclass::getnum()

上面申明的三個函式都是行內函數。在c++中,在類的內部定義了函式體的函式,被預設為是行內函數。而不管你是否有inline關鍵字。

行內函數在c++類中,應用最廣的,應該是用來定義存取函式。我們定義的類中一般會把資料成員定義成私有的或者保護的,這樣,外界就不能直接讀寫我們類成員的資料了。對於私有或者保護成員的讀寫就必須使用成員介面函式來進行。

如果我們把這些讀寫成員函式定義成行內函數的話,將會獲得比較好的效率。

class sample

void settest(int i)

} 當然,行內函數也有一定的侷限性。就是函式中的執行**不能太多了,如果,行內函數的函式體過大,一般的編譯器會放棄內聯方式,而採用普通的方式呼叫函式。這樣,行內函數就和普通函式執行效率一樣了。

2樓:匿名使用者

c++中的行內函數主要是減少函式呼叫時的跳轉。

行內函數在編譯時,會將此行內函數**直接編譯到呼叫函式之處。減少了一次函式呼叫時的跳轉啊、資料壓棧等操作。所以相比呼叫行數,行內函數的執行效率要相對高點。

不過也正因為如此,所以最終生成的程式檔案要稍微大點。

所以,一般行內函數只用於只有一兩句語句的、呼叫頻率高的函式。

3樓:匿名使用者

行內函數類似於c裡邊的巨集,只是巨集經常有一些不安全因素,比如 巨集定義 add() 是 a+b,呼叫的時候巨集定義直接,不做任何的判斷,如果呼叫res = add()*c; 得到的**就是res = a+b*c;不是想要的結果

行內函數可以理解成一個安全的巨集定義,他就是一個真正的函式,只是不用壓棧出棧,速度快,而且比巨集定義安全,所以利用頻率比較高的函式可以寫成行內函數inline

4樓:匿名使用者

c++屬於計算機語言的一種,是程式設計人員的專用軟體...

c++行內函數具體有什麼作用?

5樓:匿名使用者

行內函數在編譯的時候將不進行函式呼叫,編譯器將行內函數的**貼上在呼叫(形式上呼叫)處,可以提高效率。

行內函數只能是**很少很簡單的函式,因為如果一個很大很複雜的函式即使設為內聯,編譯器也將自動設定該函式為非內聯。

6樓:匿名使用者

行內函數inline:引入行內函數的目的是為了解決程式中函式呼叫的效率問題,這麼說吧,程式在編譯器編譯的時候,編譯器將程式中出現的行內函數的呼叫表示式用行內函數的函式體進行替換,而對於其他的函式,都是在執行時候才被替代。這其實就是個空間代價換時間的i節省。

所以行內函數一般都是1-5行的小函式。在使用行內函數時要留神:1.

在行內函數內不允許使用迴圈語句和開關語句;2.行內函數的定義必須出現在行內函數第一次呼叫之前;3.類結構中所在的類說明內部定義的函式是行內函數。

7樓:溪貝0號

和普通函式一樣, 在函式前面加上inline 起到裝b的作用

8樓:匿名使用者

可以稍微加快執行速度,但會增加**長度

9樓:翁格虎嘉悅

行內函數就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈、開關語句等

簡單的說,就是加快程式執行效率

10樓:斐冬刑浩宕

它是編譯在堆記憶體裡的,直到程式結束後它才失效,這樣能加快執行的速度,效率更高,但是行內函數一定要是短小的,否則只能起到反作用.

11樓:強文司天薇

對於一個耍要多次呼叫到的函式,而且比較小的話.最好是用行內函數.而是一個大的函式的話,可以用巨集.

行內函數其實是提示編譯器把相應的**"內聯",而不像巨集是在編譯前進行簡單的字元替換.內聯有進行語法和語義檢查的功能

c++中行內函數是什麼意思?

12樓:匿名使用者

行內函數具有一般函式的特性,它與一般函式所不同之處只在於函式呼叫的處理。一般函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中;而行內函數在呼叫時,是將呼叫表示式用行內函數體來替換。在使用行內函數時,應注意如下幾點:

1.在行內函數內不允許用迴圈語句和開關語句。

如果行內函數有這些語句,則編譯將該函式視同普通函式那樣產生函式呼叫**,遞迴函式(自己呼叫自己的函式)是不能被用來做行內函數的。行內函數只適合於只有1~5行的小函式。對一個含有許多語句的大函式,函式呼叫和返回的開銷相對來說微不足道,所以也沒有必要用行內函數實現。

2.行內函數的定義必須出現在行內函數第一次被呼叫之前。

3.本欄目講到的類結構中所有在類說明內部定義的函式是行內函數。

13樓:匿名使用者

在類宣告的內部宣告或定義的成員函式叫做內聯(inline)函式.

有兩種實現方式:

1.在類宣告的內部宣告,而在類宣告外部定義叫做顯式行內函數,如:

class display

display object;

inline void display::output(void)2.在類宣告的內部定義,叫做隱式行內函數,如:

class display

} 引入行內函數的目的是為了解決程式中函式呼叫的效率問題。

函式是一種更高階的抽象。它的引入使得程式設計者只關心函式的功能和使用方法,而不必關心函式功能的具體實現;函式的引入可以減少程式的目標**,實現程式**和資料的共享。但是,函式呼叫也會帶來降低效率的問題,因為呼叫函式實際上將程式執行順序轉移到函式所存放在記憶體中某個地址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。

這種轉移操作要求在轉去前要保護現場並記憶執行的地址,轉回後先要恢復現場,並按原來儲存地址繼續執行。因此,函式呼叫要有一定的時間和空間方面的開銷,於是將影響其效率。特別是對於一些函式體**不是很大,但又頻繁地被呼叫的函式來講,解決其效率問題更為重要。

引入行內函數實際上就是為了解決這一問題。

14樓:悟葛戰芮安

這最初是用來取代引數巨集的,因為巨集是由前處理器處理,編譯器並不知情,所以會存在一定問題,故設計行內函數來取代帶引數的巨集,以由編譯器接管這一「職務」,這樣就能進行型別檢查,且不會對引數進行多次求值。

但一般情況inline關鍵字只是給編譯器的建議,編譯器若認為函式足夠複雜(即函式體的開銷遠遠高於函式呼叫的開銷),則不會進行內聯。

C 中行內函數inline是什麼樣的

這個基本沒什麼用,本意是把行內函數的 直接插入要執行的 段 如inline myfun dosomething1 myfun dosomething2 對一般不內聯的函式,myfun會被翻譯成一個跳轉指令到myfun對應的 段 而對於行內函數,myfun的執行 被編譯器直接插入到dosomethin...

C 的虛擬函式有什麼用呢,C 中虛擬函式的作用是什麼?它應該怎麼用呢?

主要用在繼承抄與多型上 比如有一個襲汽車類,它有bai一個虛du函式alarm 就是鳴笛的聲zhi 音。汽車類有很多子 dao類,比如卡車類,小轎車類,他們的鳴笛聲音都一樣,所以只需繼承汽車類,不用在每個類裡重寫這個函式。現在如果新增一個卡丁車類,它的鳴笛聲音和其他類都不一樣,那就可以在這個類裡重寫...

王者榮耀中的金幣有什麼用處呢,王者榮耀中金幣有什麼用

第一個 就是銘文了,銘文作為王者榮耀很重要的一項道具也是不能缺少的,如果你的銘文不夠,就可以考慮拿金幣抽取銘文,當然這個辦法不怎麼好,因為太虧了!第三個 金幣購買英雄,這個王者榮耀如今推出了九十多位英雄,而裡面只有個別的幾個不是使用金幣購買的,大多數都是金幣購買,而且我還記得自己的曾經剛玩王者榮耀的...