黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

C++ 內(nèi)聯(lián)函數(shù)

c++ 內(nèi)聯(lián)函數(shù)

c++ 類和對象c++ 類和對象

在c++中我們通常定義以下函數(shù)來求兩個整數(shù)的最大值:?

int max(int a, int b)
{
    return a > b ? a : b;
}

但是這樣寫成函數(shù)有一個潛在的缺點:調(diào)用函數(shù)比求解等價表達(dá)式要慢得多。在大多數(shù)的機器上,調(diào)用函數(shù)都要做很多工作:調(diào)用前要先保存寄存器,并在返回時恢復(fù),復(fù)制實參,程序還必須轉(zhuǎn)向一個新位置執(zhí)行。

在c++中可以使用內(nèi)聯(lián)函數(shù),其目的是為了提高函數(shù)的執(zhí)行效率通常與類一起使用。如果一個函數(shù)是內(nèi)聯(lián)的,那么在編譯時,編譯器會把該函數(shù)的代碼副本放置在每個調(diào)用該函數(shù)的地方。

對內(nèi)聯(lián)函數(shù)進(jìn)行任何修改,都需要重新編譯函數(shù)的所有客戶端,因為編譯器需要重新更換一次所有的代碼,否則將會繼續(xù)使用舊的函數(shù)。

如果想把一個函數(shù)定義為內(nèi)聯(lián)函數(shù),則需要在函數(shù)名前面放置關(guān)鍵字 inline,在調(diào)用函數(shù)之前需要對函數(shù)進(jìn)行定義。如果已定義的函數(shù)多于一行,編譯器會忽略 inline 限定符。

在類定義中的定義的函數(shù)都是內(nèi)聯(lián)函數(shù),即使沒有使用 inline 說明符。

下面是使用內(nèi)聯(lián)函數(shù)來返回兩個數(shù)中的最大值:

#include <iostream>
using namespace std;

inline int max(int x, int y)
{
   return (x > y)? x : y;
}

// 程序的主函數(shù)
int main( )
{

   cout << "max (20,10): " << max(20,10) << endl;
   cout << "max (0,200): " << max(0,200) << endl;
   cout << "max (100,1010): " << max(100,1010) << endl;
   return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

max (20,10): 20
max (0,200): 200
max (100,1010): 1010

有了內(nèi)聯(lián)函數(shù),就能像調(diào)用一個函數(shù)那樣方便地重復(fù)使用一段代碼,而不需要付出執(zhí)行函數(shù)調(diào)用的額外開銷。很顯然,使用內(nèi)聯(lián)函數(shù)會是最終可執(zhí)行程序的體積增加。以空間換取時間,或消耗時間來增加空間,這是計算機學(xué)科中常用的方法。

內(nèi)聯(lián)函數(shù)中的代碼應(yīng)該只是很簡單、執(zhí)行很快的幾條語句。如果一個函數(shù)較為復(fù)雜,它執(zhí)行的時間可能上萬倍于函數(shù)調(diào)用的額外開銷,那么將其作為內(nèi)聯(lián)函數(shù)處理的結(jié)果是付出讓代碼體積增加不少的代價,卻只使速度提高了萬分之一,這顯然是不劃算的,而且有些函數(shù)即使聲明為內(nèi)聯(lián)的也不一定會被編譯器內(nèi)聯(lián)。

有時函數(shù)看上去很簡單,例如只有一個包含一兩條語句的循環(huán),但該循環(huán)的執(zhí)行次數(shù)可能很多,要消耗大量時間,那么這種情況也不適合將其實現(xiàn)為內(nèi)聯(lián)函數(shù)。

另外需要注意的是,調(diào)用內(nèi)聯(lián)函數(shù)的語句前必須已經(jīng)出現(xiàn)內(nèi)聯(lián)函數(shù)的定義(即整個函數(shù)體),而不能只出現(xiàn)內(nèi)聯(lián)函數(shù)的聲明。

c++ 類和對象c++ 類和對象

下一節(jié):c++ this 指針

c++ 簡介

相關(guān)文章
C++基礎(chǔ)