c中什麼是隱式行內函數?能舉個例子嗎

2021-05-14 08:38:52 字數 4384 閱讀 4879

1樓:普洛智應

class a

//.....

};就是實現直接寫在類的宣告中了的函式

2樓:匿名使用者

在c++中行內函數是對巨集定義一種改造,因為利用行內函數取代巨集定義得好處是:

1、可進行型別安全檢查或自動型別轉換、

例如:在c語言中,常用前處理器語句#define來代替一個函式定義。例如:

#define max(a,b) ((a)>(b)? (a):(b))

該語句是在程式中每個出現max(a,b)函式呼叫得地方,都被後面得表示式((a)>(b)?(a):(b))所替代

不難發現其實對引數a,b來說都沒有資料型別得定義,缺少一些安全性檢查。

2、提高程式的執行效率

對於c++中一般得函式,被程式呼叫得時都需要為該函式開闢空間進行函式得壓棧、出棧等所帶來得開銷,而

行內函數像巨集一樣被,呼叫行內函數的時候,由編譯器負責把行內函數的函式體**塊替換到行內函數被呼叫的

地方,這一點與巨集替換很相似;取消了函式引數壓棧、出棧所帶來的開銷,從而減少了函式呼叫開銷,提高程式得運

行效率。

所以,行內函數在專案開發中經常用到,所以關於行內函數得使用應用如下:

第一種 、行內函數得宣告和函式體得定義在一起

例如:inline int max(int a, int b);

第二種、c++類得成員函式也可以被定義為行內函數

class student{

private:

int nid;

int nage;

float fscore;

public:

void setid(int nid) //該成員函式預設自動為行內函數(隱式定義行內函數)

int getid(void) //該成員函式預設自動為行內函數(隱式定義行內函數)

inline void setage(int nage) //顯式定義行內函數

inline int getage(void) //顯式定義行內函數

void setscore(float fscore); //類定義體內沒有宣告為行內函數;

float getscore(void); //類定義體內沒有宣告為行內函數;

}inline void student::setscore(float fscore) //類定義體外實現為行內函數;

inline float student::getscore(void) //類定義體外實現為行內函數;

注意:(1)c++中,在類定義體內部定義了函式體的成員函式,被編譯器預設為行內函數,而不管這個函式頭前面是

否有關鍵字inline,比如:setid()、getid()、setage()、getage();

(2)以把實現在類定義體外部的成員函式定義為行內函數,這個時候在類定義體中只有成員函式頭的宣告,而

其實現是在類定義體外部,比如:setscore()和getscore();

行內函數的侷限性:

1、由於行內函數與巨集一樣也是實現為**替換,所以定義為行內函數的函式體不宜過大,如果函式體過

大,則某些普通的編譯器就會放棄內聯方式,而改用呼叫普通函式的方式,這樣就失去了行內函數的意義了;所以,

行內函數的函式體**不宜過大,一般就是3---4行**即可;

2、由於行內函數是編譯器在便宜階段進行函式體的,所以,這就把類的行內函數的定義與實現都必須在

宣告類的那個標頭檔案中,而不能放在實現類的那個cpp檔案中;這一點與模板template<>的特性相似

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

3樓:匿名使用者

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

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

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

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

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

4樓:匿名使用者

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

有兩種實現方式:

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

class display

display object;

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

class display

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

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

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

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

5樓:悟葛戰芮安

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

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

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

6樓:匿名使用者

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

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

7樓:匿名使用者

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

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

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

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

8樓:匿名使用者

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

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

9樓:匿名使用者

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

C中的建構函式可以被過載嗎舉個例子

當然可以。版 權public class test test string s public static void main string main 可以,也經常會過載,最常見的是無慘建構函式和有引數的建構函式,例子我就不舉了,如果沒幫助就無視吧。c 建構函式和解構函式可以過載嗎 建構函式可以被過...

程式設計中什麼是常量函式,有什麼作用嗎請舉個例子

c語言系統函式 數學函式 math.h 1 求整型絕對值函式 函式頭 int abs int x 返回值 引數x 整型 的絕對值 x 說明 本函式返回值在0 32767.如果x的值為 32768,則返回值為 32768.2 求長整型絕對值函式 函式頭 long labs long x 返回值 引數x...

c中與有什麼區別,各是什麼意思,舉個例子

判斷左右是否相等,結果是真 用1表示 或假 用0表示 如 1 2為假,1 1為真。相反,判斷左右是否不相等,結果是真 用1表示 或假 用0表示 如 1 2為真,1 1為假。c 中 符號什麼意思,舉一個例子 比如a b 他實際上是a a b的縮寫,意思和a a b是一樣的,相似的還有 等,很多都可以這...