1樓:手機使用者
稱為成員函式
。前面講過一般的成員函式,它是根據某種類的功能的需要來定義的。又講述了一些特殊的成員函式:建構函式、解構函式、拷貝初始化建構函式等。還有一些成員函式後面還會介紹。
成員函式除了說明和定義在類中之外,還有些什麼特性,這是本節討論的問題。
一、內聯性和外聯函式
類的成員函式可以分為行內函數和外聯函式。行內函數是指那些定義在類體內的成員函式,即該函式的函式體放在類體內。而說明在類體內,定義在類體外的成員函式叫外聯函式。
外聯函式的函式體在類的實現部分。
行內函數在呼叫時不是像一般的函式那樣要轉去執行被呼叫函式的函式體,執行完成後再轉**用函式中,執行其後語句,而是在呼叫函式處用行內函數體的**來替換,這樣將會節省呼叫開銷,提高執行速度。
行內函數與前面講過的帶引數的巨集定義進行一下比較,它們的**效率是一樣的,但是行內函數要優於巨集定義,因為行內函數遵循函式的型別和作用域規則,它與一般函式更相近,在一些編譯器中,一旦關上內聯擴充套件,將與一般函式一樣進行呼叫,除錯比較方便。
外聯函式變成行內函數的方法很簡單,只要在函式頭前面加上關鍵字inline就可以了。
#include
using namespace std;
class a
int a() //行內函數
int b() //行內函數
int c();
int d();
private:
int x,y;
};//inline定義行內函數
inline int a::c()
inline int a::d()
void main()
輸出結果:
d()return:8
說明:類a中,直接定義了3個行內函數,又使用inline定義了2個行內函數。行內函數一定要在呼叫之前進行定義,並且行內函數無法遞迴呼叫。
區別就在於,執行時侯的效率與定義的方法不同。
2樓:匿名使用者
c++的inline關鍵字只是對編譯器提出inline的建議。
不是所有加上了inline關鍵字的函式都能成為inline函式。
而有些沒有加inline關鍵字的函式也可能被編譯器變成了行內函數。
這應該是一個取決於編譯器問題。
3樓:手機使用者
問題。函式是一種更高階的抽象。它的引入使得程式設計者只關心函式的功能和使用方法,而不必關心函式功能的具體實現;函式的引入可以減少程式的目標**,實現程式**和資料的共享。但是,函式呼叫也會帶來降低效率的問題,因為呼叫函式實際上將程式執行順序轉移到函式所存放在記憶體中某個地址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。
這種轉移操作要求在轉去前要保護現場並記憶執行的地址,轉回後先要恢復現場,並按原來儲存地址繼續執行。因此,函式呼叫要有一定的時間和空間方面的開銷,於是將影響其效率。特別是對於一些函式體**不是很大,但又頻繁地被呼叫的函式來講,解決其效率問題更為重要。
引入行內函數實際上就是為了解決這一問題。
在程式編譯時,編譯器將程式中出現的行內函數的呼叫表示式用行內函數的函式體來進行替換。顯然,這種做法不會產生轉去轉回的問題,但是由於在編譯時將函式休中的**被替代到程式中,因此會增加目標程式**量,進而增加空間開銷,而在時間代銷上不象函式呼叫時那麼大,可見它是以目標**的增加為代價來換取時間的節省。
行內函數的定義方法
定義行內函數的方法很簡單,只要在函式定義的頭前加上關鍵字inline即可。行內函數的定義方法與一般函式一樣。如:
inline int add_int (int x, int y, int z)
在程式中,呼叫其函式時,該函式在編譯時被替代,而不是像一般函式那樣是在執行時被呼叫。
使用行內函數應注意的事項
行內函數具有一般函式的特性,它與一般函式所不同之處公在於函式呼叫的處理。一般函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中;而行內函數在呼叫時,是將呼叫表示式用行內函數體來替換。在使用行內函數時,應注意如下幾點:
1.在行內函數內不允許用迴圈語句和開關語句。
2.行內函數的定義必須出現在行內函數第一次被呼叫之前。
3.本欄目講到的類結構中所有在類說明內部定義的函式是行內函數。
4樓:影者
可以的,行內函數本身就是c的巨集轉化過來的而已,呼叫是可以的,不用像巨集一樣那麼麻煩
5樓:匿名使用者
可以的,行內函數也是函式,函式本身就可以呼叫函式。
c++行內函數具體有什麼作用?
6樓:匿名使用者
行內函數在編譯的時候將不進行函式呼叫,編譯器將行內函數的**貼上在呼叫(形式上呼叫)處,可以提高效率。
行內函數只能是**很少很簡單的函式,因為如果一個很大很複雜的函式即使設為內聯,編譯器也將自動設定該函式為非內聯。
7樓:匿名使用者
行內函數inline:引入行內函數的目的是為了解決程式中函式呼叫的效率問題,這麼說吧,程式在編譯器編譯的時候,編譯器將程式中出現的行內函數的呼叫表示式用行內函數的函式體進行替換,而對於其他的函式,都是在執行時候才被替代。這其實就是個空間代價換時間的i節省。
所以行內函數一般都是1-5行的小函式。在使用行內函數時要留神:1.
在行內函數內不允許使用迴圈語句和開關語句;2.行內函數的定義必須出現在行內函數第一次呼叫之前;3.類結構中所在的類說明內部定義的函式是行內函數。
8樓:溪貝0號
和普通函式一樣, 在函式前面加上inline 起到裝b的作用
9樓:匿名使用者
可以稍微加快執行速度,但會增加**長度
10樓:翁格虎嘉悅
行內函數就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈、開關語句等
簡單的說,就是加快程式執行效率
11樓:斐冬刑浩宕
它是編譯在堆記憶體裡的,直到程式結束後它才失效,這樣能加快執行的速度,效率更高,但是行內函數一定要是短小的,否則只能起到反作用.
12樓:強文司天薇
對於一個耍要多次呼叫到的函式,而且比較小的話.最好是用行內函數.而是一個大的函式的話,可以用巨集.
行內函數其實是提示編譯器把相應的**"內聯",而不像巨集是在編譯前進行簡單的字元替換.內聯有進行語法和語義檢查的功能
c中行內函數是什麼意思C中行內函數是什麼意思?
行內函數具有一般函式的特性,它與一般函式所不同之處只在於函式呼叫的處理。一般函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中 而行內函數在呼叫時,是將呼叫表示式用行內函數體來替換。在使用行內函數時,應注意如下幾點 1.在行內函數內不允許用迴圈語句和開關語句。如果行內函數有這...
c中怎麼理解類內定義的成員函式就是行內函數
在類內定義的成員函式預設為inline,不論前面是否加了inline,當然,是否內聯還是取決於編譯器啦 而在類外定義的成員函式就不是行內函數。c 中怎麼理解類內定義的成員函式就是行內函數?當你的class。public成員函式宣告的時候,只要這個函式體當中不存在switch等迴圈語句的時候,則這個函...
C函式怎樣呼叫呢,C 函式的定義和呼叫方法
首先,將c 函式分為靜態函式,例項化函式。當c 函式分為靜態函式,呼叫的方式 類.靜態函式名稱 當c 函式分為例項化函式,呼叫的方式 物件.例項化函式名稱 補充一下 在本類中呼叫函式時,不管是那種函式,直接呼叫 函式名稱 即可。最簡單的就是在要呼叫的地方,直接寫函式名稱。建構函式是物件導向的程式設計...