c中的行內函數有什麼用?怎麼用,C 中的行內函數有什麼用?怎麼用?

2021-05-14 08:39:54 字數 4916 閱讀 1795

1樓:么么0某爽

先把樓上的貼上來,下面是自己的

行內函數和成員函式沒什麼區別,區別就在於怎樣加快函式的執行速度而已

1.行內函數可減少cpu的系統開銷,並且程式的整體速度將加快,但當行內函數很大時,會有相反的作用,因此一般比較小的函式才使用行內函數.

2.有兩種行內函數的宣告方法,一種是在函式前使用inline關見字,另一種是在類的內部定義函式的**,這樣的函式將自動轉換為行內函數,而且沒必要將inline放在函式前面.

3.內聯是一種對編譯器的請求,下面這些情況會阻止編譯器服從這項請求.

如果函式中包含有迴圈,switch或goto語句,遞迴函式,含有static的函式.

如果不是做大的程式的話,行內函數的作用是看不出來的,這種節省開銷的做法,雖然平時沒有什麼作用,但是真的大的工程,它的必要性可想而知,所以建議平時養好使用行內函數的好習慣

2樓:黃邦勇帥哥哥

1.行內函數可減少cpu的系統開銷,並且程式的整體速度將加快,但當行內函數很大時,會有相反的作用,因此一般比較小的函式才使用行內函數.

2.有兩種行內函數的宣告方法,一種是在函式前使用inline關見字,另一種是在類的內部定義函式的**,這樣的函式將自動轉換為行內函數,而且沒必要將inline放在函式前面.

3.內聯是一種對編譯器的請求,下面這些情況會阻止編譯器服從這項請求.

如果函式中包含有迴圈,switch或goto語句,遞迴函式,含有static的函式.

由此可以看出,行內函數和成員函式沒什麼區別,區別就在於怎樣加快函式的執行速度而已。

3樓:傻瓜愛乖乖

行內函數的實質是用儲存空間(使用更多的儲存空間)來換取時間(減少執行時間)。 行內函數的定義方法是,在函式定義時,在函式的型別前增加修飾詞inline。

inline int max (int x, int y)

void main (void )

l 使用行內函數時應注意以下幾點:

1)、c++中,除在函式體內含有迴圈,switch分支和複雜巢狀的if語句外,所有的函式均可定義為行內函數。

2)、行內函數也要定義在前,呼叫在後。形參與實參之間的關係與一般的函式相同。

3)、對於使用者指定的行內函數,編譯器是否作為行內函數來處理由編譯器自行決定。說明行內函數時,只是請求編譯器當出現這種函式呼叫時,作為行內函數的擴充套件來實現,而不是命令編譯器要這樣去做。

4)、正如前面所述,行內函數的實質是採用空間換取時間,即可加速程式的執行,當出現多次呼叫同一行內函數時,程式本身佔用的空間將有所增加。如上例中,行內函數僅呼叫一次時,並不增加程式佔用的儲存間。

4樓:環浩邛心諾

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

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

5樓:匿名使用者

行內函數必須是和函式體申明在一起,才有效。像這樣的申明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)

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

6樓:匿名使用者

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

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

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

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

7樓:匿名使用者

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

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

8樓:匿名使用者

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

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

9樓:匿名使用者

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

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

10樓:匿名使用者

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

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

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

11樓:溪貝0號

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

12樓:匿名使用者

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

13樓:翁格虎嘉悅

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

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

14樓:斐冬刑浩宕

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

15樓:強文司天薇

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

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

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

16樓:匿名使用者

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

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

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

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

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

17樓:匿名使用者

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

有兩種實現方式:

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

class display

display object;

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

class display

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

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

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

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

18樓:悟葛戰芮安

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

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

c 有關概念,c 有什麼用

如果使用別人寫的類,你就知道這樣做的好處了。使用別人類裡的方法,一般只需要看類的宣告就行了,不需要看定義。一般公開給他人使用的類都比較龐大,假如宣告定義都放在一起,那你看起來會非常的費勁。這就像為什麼書前面要有一個目錄,這個目錄就相當於宣告,如果沒有目錄,找東西很麻煩。不是語法要求,目的只有一個,讓...

維生素C有什麼用?維生素c有什麼用?

維生素c又稱抗壞血酸。1907年挪威化學家霍爾斯特在檸檬汁中發現。1934年才獲得純品,是無色晶體,屬於水溶性維生素,易溶於水,水溶液呈酸性,所以稱它為抗壞血酸。在酸性溶液中穩定,在中性或鹼性溶液中易被氧化分解。鐵 銅等金屬離子能夠加速其氧化速率。維生素c在人體內的主要功能是 參加體內的氧化還原過程...

c 隨機函式怎麼寫,C 隨機函式怎麼用

函式名 rand 功 能 隨機數發生器。用 法 int rand void 所在標頭檔案 函式說明 rand 的內部實現是用線性同餘法做的,它不是真的隨機數,因其週期特別長,故在一定。的範圍裡可看成是隨機的。rand 返回一隨機數值的範圍在0至rand max 間。rand max的範圍最少是在32...